C++实现斐波那契数列计算过程
这个实现太绕弯子了,不太好
一、裴波那契数原理:
- f(0)=f(1)=1;
- 在n大于等于2时:
二、图形表示:
为了方便理解我做了下面这个表格,以详细表示计算过程中数值的传递关系。
约定如下:
- 表中每一行都表示一次计算;
- 初始状态:f(0)=f=1,f(1)=g=1;
- 黄色代表计算结果f(n);
- 下面这两个曲线代表数值传递,先蓝后红;
开始计算
- 蓝色曲线:通过一个临时变量将本行的g保存,再传递给下一行的f;
- 计算f(2):f(2)=f+g =1+1=2
- 红色曲线:直接将f(2)传递给下一行的g;
- 以下循环…
三、代码实现:
// An highlighted block
int Fib(int n)
{
if(n <= 0)
return 0;
int f=0, g=1;
int tmp=0; //上图蓝色曲线所使用的临时变量
while(--n)
{
tmp = g; //临时存储本次的g
g = f+g; //计算f(n),并传递给下一行的g
f = tmp; //将保存的g传递给f,用以下次计算
}
return g;
}
如果哪里说得不清楚请在下面评论。谢谢!