劍指Offer09 斐波拉契數列數列問題

2021-09-26 15:05:04 字數 969 閱讀 3847

斐波拉契數列問題:要求實現鍵盤輸入乙個數n,輸出斐波拉契數列的第n項。斐波拉契數列定義:f(0)=0;f(1)=1;f(n)=f(n-1)+f(n-2);

按照斐波拉契地推公式很容易想到的方法就是採用遞迴來求解,但是遞迴方法存在很嚴重的效率問題;例如要求f(10),需要先求f(9)和f(8),同樣要求f(9)必須先求f(8)和f(7),以此類推發現存在較多的重複。

更簡單的方法就是從下往上計算,首先根據f(0)和f(1)算出f(2),再根據f(1)和f(2)算出f(3)…以此類推就可以算出第n項了。該方法的時間複雜度為o(n)

其實還有一種時間複雜度為o(logn)的方法,但是數學公式較為複雜,一般不夠實用。

青蛙跳台階問題:乙隻青蛙一次可以跳上1級台階,也可以跳上2級台階。求該青蛙跳上n級台階總共多少種跳法。

分析:如果只有一級台階,那麼只有一種跳法;如果有2級台階,那麼就有兩種跳法:分兩次跳,每次跳1級;一次跳2級。那麼該問題的結論是:

青蛙跳上n階台階的不同跳法是f(n)=f(n-1)+f(n-2)。

青蛙跳台階公升級版:乙隻青蛙一次可以跳上1級台階,也可以跳上2級台階…他也可以跳上n級台階,此時該青蛙跳上n級台階共有多少種跳法?f(n)=2^n-1。數學歸納法。。。

public class code009 

private static int fibonacci(int n)

if(n==1)

return fibonacci(n-1)+fibonacci(n-2);

}private static int solution(int n)

if(n==1)

//定義初始n為0和n為1時的值,並用兩個變數儲存

int num0=0;

int num1=1;

int result=0;

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

return result;

}}

劍指offer 09 斐波那契數列

寫乙個函式,輸入n,求斐波那契數列的第n項。思路 遞迴 順序求 公式。遞迴 重複的節點數會隨著n的增大而急劇增加,這意味著計算量會隨著n的增大而急劇增大。事實上,用遞迴的方法計算的時間複雜度是以n的指數的方式遞增的。順序 從下往上計算,首先計算f 0 和f 1 算出f 2 再根據f 1 和f 2 算...

劍指Offer 斐波拉契數列

題目描述 寫乙個函式,輸入n,求斐波那契數列的第n項,斐波那契數列的定義如下 n 0,f n 0 n 1,f n 1 n 1 f n f n 1 f n 2 解題思路 演算法 從上圖中不難發現 在這棵樹中有很多結點是重複的,而且重複的結點數會隨著n的增大而急劇增加,這意味計算量會隨著n的增大而急劇增...

劍指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 ...