劍指offer 07 斐波那契數列

2022-09-17 16:21:16 字數 1815 閱讀 5112

題目描述

大家都知道斐波那契數列,現在要求輸入乙個整數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)

2else

13return

fib[n];14}

15 }

迴圈:

1

function

fibonacci(n)29

return

res;

10 }

執行結果

題目描述

大家都知道斐波那契數列,現在要求輸入乙個整數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)

2else

13return

fib[n];14}

15 }

迴圈:

1

function

fibonacci(n)29

return

res;

10 }

執行結果

劍指offer07 斐波那契數列

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

劍指07 斐波那契數列

大家都知道斐波那契 fibonacci 數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項 從0開始,第0項為0,第1項是1 要求使用遞迴和非遞迴兩種方法 public class solution 上述 效率低,這樣是拿不到offer的 o 上述遞迴 之所以慢,是因為會大量重複計算相同的數...

劍指offer 斐波那契數列

題目1描述 寫乙個函式,輸入n,求斐波那契數列的第n項。斐波那契數列的定義如下 f n 0 n 0 f n 1 n 1 f n f n 1 f n 2 n 1 分析描述 在大多數的c語言教科書中,一般會用遞迴求斐波那契數列。如下 long long fibonacci unsigned int n ...