题目要求如下:
其中第0项的值为0,第1项的值为1,而第2项的值仍为1,而第3项的值为2。
下一项的值是前面2项值的累加。
一种最简单的方式就是使用递归进行调用,其对应的代码如下:
int Fibonacci(int n ) {
if(n==0) return 0;
else if (n==1||n==2) return 1;
else{
return Fibonacci(n-1)+Fibonacci(n-2);
}
}
使用递归方式是简单,但是耗时非常长,当输入的值很大时,由于前面很多项的值都是重复计算的,因此耗费很大一部分时间在重复计算中。
另外1种方式是通过迭代的方式来进行,其实现代码类似如下:
/**
*
* @param n int整型
* @return int整型
*/
int Fibonacci(int n ) {
if(n==0)return 0;
int next = 1, t1 = 0, t2 = 1;
for (int i = 1; i < n; ++i) {
next = t1 + t2;
t1 = t2;
t2 = next;
}
return next;
}
对于第0项和第1项直接返回,而第2项开始则是第0项与第1项的累加。之后第3项是第2项与第1项的累加。
之后把第2项的值赋值给第1项,而第3项的值赋值给第2项,从而实现上述迭代的过程。
最后是通过后的结果: