我在做其他練習,我必須:下循環轉換爲while循環和遞歸
「寫一個遞歸函數打印所有解決八個皇后棋的問題,返回的數量解決方案和功能原型必須是:INT功能(無效)
上班我以前靜態變量沒有參數規則周圍
。我已經完成了它(與谷歌的幫助),它的工作原理,但他們不允許使用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循環?我是新遞歸,我以爲我明白了,但它似乎我錯了...
'for'到'while'轉換部分對我來說似乎是正確的。這是你改變的唯一的東西嗎? – Mahesh
是的,它是所有的問題,你可以嘗試它,第一個工程,但第二個不工作:/ – ItsASecret
所以,你只改變了最後的'for'循環,保持原樣。我希望你保留了回覆聲明。 – Mahesh