一个八皇后的递归 不明白
#include<stdio.h>
#include<math.h>
void display(int board[],int nSize = 8)
{
static int count = 0;
printf("第%d种解法\n",++count);
for(int i=0;i<8;++i)
{
for(int j=0;j<8;++j)
{
if(j==board[i])
printf(" 1");
else
printf(" 0");
}
printf("\n");
}
}
void fill_queen(int board[], int nRow=0, int nSize = 8)
{
if(nRow==nSize) // 设置递归返回条件
{
display(board,nSize); // 显示棋盘
return;
}
for(int col=0; col<nSize; col++)
{
for(int i=0; i<nRow; i++) //寻找有没有跟(nRow,col)冲突的位置
{
if(board[i]==col||(abs(nRow-i)==abs(col-board[i])) )
goto next;
}
board[nRow]=col;
fill_queen(board,nRow+1,nSize);
next:;
}
}
int main()
{
int board[]={0};
fill_queen(board,0);
return 0;
}
前几天看论坛的一个人写的递归
我才刚刚学习递归,不太理解啊。。。
尤其是这个 fill_queen(board,nRow+1,nSzie);里面的“nRow+1”,我debug nRow发现他的值在变化 ,是谁在给他赋值?
还有就是这个递归整体也不怎么明白。
希望能解释啊。折磨我好久了
[解决办法]
尤其是这个 fill_queen(board,nRow+1,nSzie);里面的“nRow+1”,我debug nRow发现他的值在变化 ,是谁在给他赋值?
-------------------
你看到的应该是是当前fill_queen函数自身的值,非上一个fill_queen的nRow值。
[解决办法]
递归就是再函数内部调用其自身
[解决办法]