|
发表于 2024-4-9 17:11:05
|
显示全部楼层
使用记忆化可以提高递归函数的效率,避免重复计算。以下是使用记忆化的修正代码:
- #include <iostream>
- #include <unordered_map>
- using namespace std;
- int n, m;
- long long mod = 1000000007;
- unordered_map<string, int> memo; // 记忆化存储计算结果
- int dfs(int d, int h, int j) {
- string key = to_string(d) + "_" + to_string(h) + "_" + to_string(j);
- if (memo.count(key))
- return memo[key];
-
- if (d == 0 && h == 1 && j == 1)
- return memo[key] = 1;
- else if (d < 0 || h < 1 || j < 1)
- return memo[key] = 0;
- else
- return memo[key] = dfs(d - 1, h - 2, j) + dfs(d - 1, h, j - 1);
- }
- int main() {
- cout << "请输入n和m的值:" << endl;
- cin >> n >> m;
- int result = dfs(n, m, 2);
- cout << "结果:" << result << endl;
- return 0;
- }
复制代码
在这个修正后的代码中,我们使用了一个`unordered_map<string, int>`来存储已经计算过的结果,以避免重复计算。每次进入递归函数前,我们都通过将当前的参数d、h、j转化为字符串形式作为键,查询是否已经计算过对应结果。如果已经存在,直接返回结果;否则,继续进行计算,并将结果存储到memo中。这样,下次遇到相同的参数时,就可以直接从memo中获取结果,避免重复计算。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|