首页 文章

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

提问于
浏览
2

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

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

为了解决无参数规则,我使用了静态变量 .

我've done it (with google'的帮助),它的工作原理,但他们不允许使用 for 循环,由于某种原因,我无法设法将最后两个 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 循环,如下所示:

int i = 0;
while (i < n)
{
    int j = 0;
    while (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--;
    i++;
}

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

2 回答

  • 1

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

    while(i++<n)
    

    它工作正常 .

  • 1

    我运行代码并发现了问题 . 这是与线

    if (j < col) {
        continue;
    }
    

    因为这不是 continue 循环的 continue 语句,所以你必须在这种情况下增加 i .

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

相关问题