C将for循环转换为while循环和递归

时间:2013-07-21 19:52:03

标签: c loops recursion syntax

我正在做另一个练习,我必须:

  

“写一个递归函数来打印所有八王棋问题的解决方案,返回解决方案的数量,函数原型必须是: int function(void)

要解决无参数规则,我使用了 static 变量。

我已经完成了(使用谷歌的帮助),但是它可以正常工作,但他们不允许使用for循环,由于某种原因,我无法设法转换最后两个{{1} }循环到for循环。

它让我发疯,应该很容易!我认为这是让它变得混乱的递归......

这是工作职能:

while

我尝试将最后两个int function() { static int count = 0; static int col = 0; const int n = 8; static int hist[8] = {10, 10, 10, 10, 10, 10, 10, 10}; int i1 = 0; if (col == n) { count++; while (i1++ < n) { putchar('0' + hist[i1-1] + 1); } putchar('\n'); } for (int i = 0; i < n; i++) { int j = 0; for (j = 0; j < col && !(hist[j] == i || (hist[j] - i) == col - j || -(hist[j] - i) == col - j); j++); if (j < col) { continue; } hist[col] = i; col++; function(); col--; } return count; } 循环转换为for循环,如下所示:

while

但它不起作用,是否有更多的for循环?我是递归的新手,我以为我得到了它,但似乎我错了......

2 个答案:

答案 0 :(得分:1)

我运行了代码并发现了问题。这是行

if (j < col) {
    continue;
}

因为这不是转到continue循环的for语句,所以在此条件下也必须递增i

if (j < col) {
    i++;      // add this line
    continue;
}

答案 1 :(得分:1)

您可以将第一个循环更改为

    while(i++<n)

它工作正常。