c++ - 求组合的几个循环代码如何转化为递归的方法?

标签 c++ combinations backtracking

我正在尝试将此代码转换为递归方法

for(int i=0;i<25;++i)
  for(int j=i+1;j<25;++j)
    for(int k=j+1;k<25;++k)
      for(int l=k+1;l<25;++l)
        for(int m=l+1;m<25;++m)
       {//}

该方法正在寻找 25c5 组合。我以递归的方式写了这个

int soln[5];
void backtrack(int c)
{
if(c<5)
{
    for(int i=c;i<25;++i)
    {
        soln[c] = i;
        backtrack(c+1);

    }
}
else
{ // }

我的解决方案显然是错误的,因为递归的数量是 600 万,但实际应该是 5 万。我该如何纠正?

最佳答案

void backtrack(int start, int depth) {
  if (depth < 5) {
    for (int i = start; i < 25; ++i) {
      backtrack(i + 1, depth + 1);
    }
  }
}

看起来它会和你的嵌套循环做同样的事情。

关于c++ - 求组合的几个循环代码如何转化为递归的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18415902/

相关文章:

c++ - QTKit 没有找到任何附加的视频输入设备

c++ - std::random_device 在 g++ 中不工作

r - 在R中的数据集中通过id查找两个字符的组合

java - 如何在不使用 System.exit(0) 的情况下停止回溯?

c++ - VS2015 : LNK2019 error when linking with Muiload. 库

c++ - 我可以从模板访问结构/类成员吗?

c# - 查找 int[] 数组的所有可能组合,在 C# 中受长度限制

c - 用 C 为所有可能的排列设计一个算法,包括零

python - 回溯在 Python 中的工作原理

从完整图计算最短路径