斐波那契數列的優化問題 青蛙跳台階問題

2021-07-27 11:39:39 字數 1309 閱讀 5398

題目描述:寫出乙個函式,輸入n,求解菲波那切數列的第n項。

很多教材在講述遞迴函式(在乙個函式內部呼叫這個函式自身)時會使用fibonacci例子。

方法1:

**如下:

public static long fib(int n)

if(n==1)

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

}思考:我們以求解f(10)為例。想要求得f(10),就得求得f(9)和f(8).同樣,想要求得f(9) 就得求f(8)和f(7)…我們不難發現這裡面有很多節點是重複計算的。

方法2

從下往上計算。首先根據f(0)、f(1)計算得到f(2)。再根據f(1)和f(2)計算得到f(3)。。。。以此類推就可以算出第n項了。**如下:

/**

* 優化的菲波那切數列

*/ public static long optimizefib(int n);

if(n<2)

long fibone = 1;

long fibtwo = 0;

long fibn = 0;

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

return fibn;

} 該思路的時間複雜度為o(n)…

n=50時,用傳統的方法耗時:1258626902582224ms

優化後的方法耗時為:125862690250ms

約為1w倍。所以說優化還是挺有必要!!!

題目二(舉一反三):乙隻青蛙一次可以跳上1個台階,也可以跳上2個台階。求該青蛙跳上乙個n級的台階總共有多少中做法。

分析:當n = 1 ,顯然只有1種跳法

當n = 2,有2中跳法。

當n = 3,有3中跳法。

以此類推。f(n) = f(n-1) + f(n-2);

**如下:

public static int jumpfloor(int target) ;

if(target<2)

int target1 = 1;

int target2 = 2;

int targetn = 0;

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

return targetn;

}

斐波那契數列及青蛙跳台階問題

都是 寫乙個函式,輸入n,求斐波那契 fibonacci 數列的第n項。斐波那契 fibonacci 數列定義如下 f n 0,1,f n 1 f n 2 n 0n 1 n 2 效率很低的解法 遞迴解法 效率很低 long long fibonacci solution1 unsigned int ...

斐波那契數列及青蛙跳台階問題

題目1 寫乙個函式,輸入n,求斐波那契 fibonacci 數列的第n項。斐波那契 fibonacci 數列定義如下 f n 0,1,f n 1 f n 2 n 0 n 1 n 2 效率很低的解法 遞迴解法 效率很低 objc view plain copy long long fibonacci ...

斐波那契數列及青蛙跳台階問題

題目1 寫乙個函式,輸入n,求斐波那契 fibonacci 數列的第n項。1斐波那契 fibonacci 數列定義如下 效率很低的解法 遞迴解法 效率很低 function fibonacci solution1 n 2 迴圈解法 改進的演算法 從下往上計算。首先根據f 0 和f 1 算出f 2 再...