斐波那契數列問題的遞迴和動態規劃2
給出乙個整數 n,代表台階數,一次可以跨 2 個或者 1 個台階,請輸出有多少種走法。
輸入描述:
第一行乙個整數 n。
輸出描述:
輸出走法數對 1e9 + 7 取模的值。
示例1輸入
3
輸出3
備註:
1 ≤n
≤1018
1 \leq n \leq 10^
1≤n≤10
18題解:
跟前面一題 斐波那契數列問題的遞迴和動態規劃 基本一致,遞推公式:f(n)=f(n-1)+f(n-2) ,唯一的不同就是 f(1)=1,f(2)=2。
**:
#include #include using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
ll tmp[2][2];
ll n;
void mat_mul(ll ret[2], ll ans[2]) }}
memcpy(ret, tmp, sizeof tmp);
}void solve(ll n) , };
ll ans[2] = , };
while (n)
printf("%lld\n", (2ll * ret[0][0] % mod + ret[1][0]) % mod);
}int main(void)
遞迴和動態規劃 斐波那契數列
程式設計師 面試指南 chapter 4 感受 mulmatrix函式和matrixpower函式寫法要注意細節,需要牢記加速矩陣乘法的演算法思路將時間複雜度降低!暴力遞迴,o 2 n intf1 int n return res 利用矩陣,o log n 牛客上 給出乙個整數 n,請輸出斐波那契數...
斐波那契數列(經典遞迴和動態規劃)
斐波那契數列,指的是這樣乙個數列 1 1 2 3 5 8 13 21 也就是除了第乙個和第二個數以外,每一項都等於前兩項之和。使用經典遞迴的做法如下 public int fib1 int a return fib1 a 1 fib1 a 2 但是使用經典遞迴的方法效率較低。原因是沒有儲存已經計算過...
有關遞迴和斐波那契數列
求斐波那契數列第n項,最簡單的方法 intf int n 但顯然這很低效,因為會重複計算很多次前面的值,比如算f 10 要得到f 9 和f 8 而求f 9 要求f 8 和f 7 求f 8 要求f 7 和f 6 就重複計算了f 8 和f 7 越往後重複的越多,總複雜度為指數級,效率極低 我們可以將前面...