剑指offer 面试6 斐波那契数列

 题目:求斐波那契数列的第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

猜你喜欢

转载自blog.csdn.net/qauchangqingwei/article/details/80885710
今日推荐