题目:求斐波那契数列的第n项。
写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列的 定义如下:
当n=0时,f(n)=0; 当n=1时,f(n)=1; 当n>1时,f(n)=f(n-1)+f(n-2);
解题常规思路:
直接使用递归调用生成第n项,但是造成了多次的重复调用,效率非常低下。
递归代码如下:
public int fibonacci(int n)
{
if(n<=0)
return 0;
else if(n==1)
return 1;
else if(n>1)
return febonacci(n-1)+febonacci(n-2);
}
推荐算法:
循环修改递归,保存每一步计算的第n-1项,用于后面的计算。
public int Fibonacci(int n) {
if (n <= 0)
return 0;
if (n <= 2)
return 1;
long fib1 = 1, fib2 = 1, fibn = 0;
for (int i = 3; i <= n; i++) {
fibn = fib1 + fib2;
fib1 = fib2;
fib2 = fibn;
}
return fibn;
}
来源于 剑指offer 何海涛 电子工业出版社 参考博客 https://blog.csdn.net/u011080472/article/details/51240707