一、 NC 65
- 在递归的过程中,越往下走,重复计算的数就越多;
- 记忆化搜索算法
class Solution {
public:
int Fibonacci(int n) {
// 用递归很慢,这里我们可以考虑把中间的值存下来,不用重复计算,dp数组
int dp[105];
dp[1] = 1; // 初始化斐波那契数列,这里我让下标从1开始,比较好算
dp[2] = 1;
if (n < 3) {
return 1;
} else {
for (int i = 3; i <= n; ++i) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
}
};
二、矩阵快速幂解法
- 同理我们是可以用这样的思想去快速求矩阵幂的,在矩阵相乘的部分可以自定义一个结构体,补充矩阵乘法代码;
- 可以当成一个模板背一下;
int quick_pow(int a, int n) {
int res = 1;
while (n > 0) {
// 若 n ,位上还有值,就继续走
if (n & 1) res = res * a;
a *= a;
n >>= 1;
}
return res;
}