劍指07 斐波那契數列

2022-06-08 05:54:10 字數 970 閱讀 3384

大家都知道斐波那契(fibonacci)數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0,第1項是1)。

要求使用遞迴和非遞迴兩種方法

public

class

solution

}

上述**效率低,這樣是拿不到offer的(ㄒoㄒ)~~!! 

上述遞迴**之所以慢,是因為會大量重複計算相同的數。

分析:如果自底向上使用動態規劃的話,我們可以當前狀態只和之前的兩個狀態有關,所以並不需要乙個dp陣列來存所有的狀態,只需儲存最近的兩個數

public

class

solution

return

sum;}}

分析:觀察2.1節版本1可以發現,其實還可以利用 sum 儲存第 n-1 項

public

class

solution

else

if(n == 1)

int sum = 1;

int one = 0;

for(int i=2;i<=n;i++)

return

sum;}}

轉化為矩陣運算可得

而右邊的2*1矩陣又可以進一步分解為

一直分解下去,直到右邊的2*1矩陣位f(2),f(1),即

現在的問題轉化為如何求矩陣的乘方,利用乘方的冪次奇偶性質,比如相求n次方,只需要求n/2平方,然後再平方以下即可。

快速冪解法見【40講系列6】遞迴、分治

劍指offer07 斐波那契數列

大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項 從0開始,第0項為0,第1項是1 n 39 輸入 4 返回值 3 陣列 這裡用遞迴會報錯 您的程式未能在規定時間內執行結束,請檢查是否迴圈有錯或演算法複雜度過大 改用陣列可以巧妙解決 報超時 程式未能在規定時間內執行結束 ...

劍指offer 07 斐波那契數列

題目描述 大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項 從0開始,第0項為0,第1項是1 n 39 時間限制 c c 3秒,其他語言6秒 空間限制 c c 64m,其他語言128m 題目示例 輸入 4 返回值 3解法分析在學遞迴的時候,斐波那契數列可謂最佳例子,除去n...

07 斐波那契數列

大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項 從0開始,第0項為0 n 39 package recursionandloop 題目描述 大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項 從0開始,第0項為0 f n n 39 public...