寫乙個函式,輸入 n ,求斐波那契(fibonacci)數列的第 n 項。斐波那契數列的定義如下:
f(0) = 0, f(1) = 1
f(n) = f(n - 1) + f(n - 2), 其中 n > 1.
斐波那契數列由 0 和 1 開始,之後的斐波那契數就是由之前的兩數相加而得出。
答案需要取模 1e9+7(1000000007),如計算初始結果為:1000000008,請返回 1。
示例 1:
輸入:n = 2
輸出:1
示例 2:
輸入:n = 5
輸出:5
1、遞迴:return (fib(n-1)+fib(n-2))%(1000000007) 以fib(0)和fib(1)為終止條件,但是時間複雜度太高;
2、動態規劃:核心思想是把原問題分解成子問題進行求解,其實就是分治的思想。f(n) = f(n - 1) + f(n - 2)為轉移方程。
3、注意:在計算過程中就達到取模要求,不取模會溢位,不要等到結果輸出時才取模。前兩次提交時,沒有在過程中取模,提交一直不通過,一定要多思考!
class
solution
// return (fib(n-1)+fib(n-2))%(1000000007);
int sum=
0,a=
0,b=1;
for(
int i=
2;i<=n;i++
)return sum;
}}
乙隻青蛙一次可以跳上1級台階,也可以跳上2級台階。求該青蛙跳上乙個 n 級的台階總共有多少種跳法。
答案需要取模 1e9+7(1000000007),如計算初始結果為:1000000008,請返回 1。
此題的切入點是倒序,青蛙跳的最後一步可能是跳1階或2階。如果最後一步是跳了一階,那麼前(n-1)階有f(n-1)種跳法;如果最後跳的2階,那麼前(n-2)階有f(n-2)種跳法。其實這就是斐波那契問題。不同的是,f(0)取值不同
青蛙跳台階:f(0)=1 , f(1)=1,f(2)=2 ;
斐波那契數列問題: f(0)=0,f(1)=1,f(2)=1
斐波那契數列10
大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項 從0開始,第0項為0 斐波那契數列屬於經典的遞迴問題,對於這題的求解,我們首先要知道斐波那契數列的狀態轉移式,即f n f n 1 f n 2 且在n 1或2時,f n 1。public static int feibol...
10 斐波那契數列
效率對比 遞迴與非遞迴。差距很大。include using namespace std long long fibonacci unsigned int n if n 1 return fibonacci n 1 fibonacci n 2 long long fibonacci2 unsigne...
題10 斐波那契數列
要求輸入乙個整數n,請你輸出斐波那契數列的第n項 從0開始,第0項為0 首先用簡單的遞迴實現 public class fibonacci if n 1 return fibrecusion n 1 f n 2 再用迴圈實現 public class fibonacci if n 1 int res...