【剑指offer】07 斐波那契数列

题目地址:斐波那契数列

题目描述                                   

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。

n39

时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 64M,其他语言128M

题目示例                                   

输入:
4
返回值:
3

解法分析                                   

在学递归的时候,斐波那契数列可谓最佳例子,除去n=0&n=1的情况return Fibonacci(n-1)+Fibonacci(n-2)就完事了,但是递归虽简单但有缺点,就是速度感人,时间复杂度为O(2^n),同时n过大时容易溢出,因此我们可以找一找更优解。

如果我们利用数组和for循环,可以大大减少递归方法中的重复计算,时间复杂度降至O(n)。

或者单纯利用循环,时间复杂度同样为O(n)。

代码                                         

数组+循环:

 1 function Fibonacci(n)
 2 {
 3     // write code here
 4     if(n<=1){
 5         return n;
 6     }else{
 7         var fib = [];
 8         fib[0] = 0;
 9         fib[1] = 1;
10         for(var i=2;i<=n;i++){
11             fib[i]=fib[i-2]+fib[i-1];
12         }
13         return fib[n];
14     }
15 }

循环:

 1 function Fibonacci(n)
 2 {
 3     // write code here
 4     var res = 0, mid = 1;
 5     while(n--){
 6         mid+=res;
 7         res=mid-res;
 8     }
 9     return res;
10 }

执行结果                                   

 
 
原文地址:https://www.cnblogs.com/sunlinan/p/14206581.html