劍指offer之個人刷題歷程記錄
阿新 • • 發佈:2018-11-16
斐波那契數列
題目描述:
大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從1開始,第0項為1)。
n<=39
解題思路:
斐波那契數列:1,1,2,3,5,8,13…從1,1開始,下一個數字是前兩個數字之和。
注意點:
1.注意題目上說n<=39,所以需要判斷n的大小。
2.使用遞迴的時候,雖然寫出來能跑,但是發現執行時間真長,足足1234ms,重複計算就是浪費時間,而且看到討論區裡說的一直遞迴容易使得棧溢位。仔細想了一下確實是這樣。
3.使用不是遞迴的,直接算出來存在數組裡反而快,僅用17ms而且佔用記憶體也下降了。
具體程式碼:
1.遞迴:
public class Solution {
public int Fibonacci(int n) {
if(n>39){
return 0;
}
if(n<=1){
return n;
}
return Fibonacci(n-1)+Fibonacci(n-2);
}
}
2.不是遞迴:
public class Solution {
public int Fibonacci(int n) {
if (n<=1){
return n;
}
int[] array=new int[n];
int i;
array[0]=1;
array[1]=1;
for(i=2;i<n;i++)
{
array[i]=array[i-1]+array[i-2];
}
return array[n-1];
}
}
總結:
java新建一個數組:(參考的部落格連結)
https://www.cnblogs.com/CAOXIAOYANG/p/6003436.html