题目
即已知一个斐波那契数列,求任意项的斐波那契数Fn
一、非递归实现
策略
已知 Fn = Fn-1 + Fn-2,则可以先根据F1与F2求出F3,然后再由F2与F3求出F4,依次向上累加求出F5,F6…直到求出Fn。有两种处理方式
- 处理方式一:
由 F1 + F2 = F3 先求出F3,然后再更新 F1 和 F2 (F1 = F2,F2 = F3)求出F3,这个值即为F4的值。然后再更新F1和F2(F1 = F2,F2 = F3)求出F3,这个值即为F5的值。。。。。。
注意:求F3只需循环一次,求F4只需循环二次,求F5只需循环三次。。。求Fn只需循环(n-2)次,如下图:
- 处理方式二:
定义一个数组value足够的大,从下标为1开始存,value[1] = F1,value[2] = F2,value[3] = F3 等等,直到存储到 value[n-1] = Fn-1,然后求出Fn即可Fn = value[n-1] + value[n-2]。
代码(处理方式一)
//求斐波那契数Fn
int function(int n){
if(n == 1 || n == 2)//n=1或者n=2
return 1;
//n大于等于3
int F1 = 1, F2 = 1, F3;
for(int i = 1;i <= n-2; i++){//求Fn要循环n-2次
F3 = F2 + F1;
//更新F1和F2
F1 = F2;
F2 = F3;
}
return F3;//return F2也行
}
代码(处理方式二)
//求斐波那契数Fn
int function_1(int n){
int value[1000];//足够大
value[1] = 1;
value[2] = 1;
for(int i = 3; i <= n-1; i++)
value[i] = value[i-1] + value[i-2];
int Fn = value[n-1] + value [n-2];
return Fn;
}
二、递归实现
//求斐波那契数Fn
int F(int n){
if(n == 1 || n == 2)
return 1;
else
return F(n-1) + F(n-2);
}