yueyufeng 发表于 2024-4-9 17:09:40

为什么没有输出

#include <bits/stdc++.h>
using namespace std;
int n,m,ans=0,dp;
long long mod=1000000007;
int dfs(int d,int h,int j){
if(dp)
   return dp;
if(d==0&&h==1&&j==1)
return 1;
else if(d<0||h<1||j<0||j>h)
return 0;
   dp=(dfs(d-1,h,j*2)+dfs(d,h-1,j-1))%mod;
   return dp;
}
int main()
{
cin>>n>>m;
int result=dfs(n,m,2);
cout<<result;
return 0;
}

FishC 发表于 2024-4-9 17:10:03

你的代码中有一些错误。首先,你需要包含<iostream>头文件以使用std::cout。其次,在定义函数dfs时,你没有明确指定返回值类型。最后,在调用dfs函数并输出结果时,你没有提供完整的代码。

以下是修正后的代码:

#include <iostream>
using namespace std;

int n, m, ans = 0;
long long mod = 1000000007;

int dfs(int d, int h, int j)
{
    if (d == 0 && h == 1 && j == 1)
      return 1;
    else if (d < 0 || h < 1 || j < 1)
      return 0;
    else
      return 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;
}

这段代码可以通过深度优先搜索(dfs)的方式求解给定参数n和m的结果。首先在主函数中读取输入的n和m,然后调用dfs函数计算结果并将结果输出。在dfs函数中,通过递归地调用自身,根据递推关系式计算出结果。

希望这个答案可以帮到你!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

yueyufeng 发表于 2024-4-9 17:10:48

FishC 发表于 2024-4-9 17:10
你的代码中有一些错误。首先,你需要包含头文件以使用std::cout。其次,在定义函数dfs时,你没有明确指定返 ...

用记忆化呢

FishC 发表于 2024-4-9 17:11:05

yueyufeng 发表于 2024-04-09 17:10
用记忆化呢

使用记忆化可以提高递归函数的效率,避免重复计算。以下是使用记忆化的修正代码:
#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;
   
    if (d == 0 && h == 1 && j == 1)
      return memo = 1;
    else if (d < 0 || h < 1 || j < 1)
      return memo = 0;
    else
      return memo = 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 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 为什么没有输出