我正在做另一个练习,我必须:
“写一个递归函数来打印所有八王棋问题的解决方案,返回解决方案的数量,函数原型必须是: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 回答
您可以将第一个循环更改为
它工作正常 .
我运行代码并发现了问题 . 这是与线
因为这不是
continue
循环的continue
语句,所以你必须在这种情况下增加i
.