某个问题对应的递归模型如下:f(1)=1,f(2)=2,f(n)==f(n-1)+f(n-2)+...+f(1)+1 n>2时,可以采用如下递归算法求解:long f(int n){if(n==1) return 1;if(n==2) return 2;long sum=1;for(int i=1;i<=n-1;i++) sum+=f(i);return sum;} 但其中存在大量的重复计算,请采用备忘录方法求解
时间: 2023-12-14 16:04:03 浏览: 80
好的,根据你的问题,这个递归模型的公式是 f(1)=1,f(2)=2,f(n)=f(n-1)+f(n-2)+...+f(1)+1 (n>2),其中存在大量的重复计算。你想采用备忘录方法求解。那么我可以给你提供一下备忘录方法的思路:
首先,我们可以定义一个数组 memo,用来记录已经计算过的 f(i) 的值。在每次递归时,先检查 memo[i] 是否已经存在。如果已经存在,直接返回 memo[i] 的值。如果不存在,就按照原来的递归算法计算出 f(i) 的值,并将其存入 memo[i] 中。这样,就可以避免重复计算。
下面是使用备忘录方法改进后的代码:
```python
long memo[1000000]; // 定义备忘录数组
long f(int n) {
if (n == 1) return 1;
if (n == 2) return 2;
if (memo[n] != 0) return memo[n]; // 如果已经计算过,直接返回备忘录中的值
long sum = 1;
for (int i = 1; i <= n - 1; i++) sum += f(i);
memo[n] = sum; // 将计算结果存入备忘录中
return sum;
}
```
这样,每次计算 f(i) 的时候,都会先检查备忘录中是否已经计算过,如果已经计算过,就直接返回备忘录中的值,从而避免了重复计算。
阅读全文