斐波拉契數列問題:要求實現鍵盤輸入乙個數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 ...