题目地址:斐波那契数列
题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。
n≤39
时间限制: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 }
执行结果