3

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

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 万。我该如何纠正?

4

2 回答 2

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

似乎它会和你的嵌套循环一样。

于 2013-08-24T07:28:23.270 回答
1

我认为,当我们比较性能时,嵌套循环比递归方式更好。必须以递归方式调用方法,这需要一些时间。

于 2013-08-24T07:31:03.100 回答