数学题,做不来
但是后一个可以通过前一个计算出的,一定可以用递归实现,找到递归式即可。
直接贴大佬的证明https://zhuanlan.zhihu.com/p/41875024
防止重复计算,我们还是用了dp,要清楚递归要自己重写一个函数的,不要在当前函数吊死。
class Solution {
public:
vector<int> dp;
int jumpFloorII(int number) {
//找到递归方程f(n) = 2*f(n-1);
dp.resize(number+2);
if(number == 1) return 1;
for(int i = 1; i <= number; i++){
dp[i] = -1;
}
dp[1] = 1;
return 2*sum(number-1);
}
int sum(int n){
if(n == 1) return 1;//递归边界
if(dp[n] != -1) return dp[n];
else{
dp[n] = 2*sum(n-1);
return dp[n];
}
}
};