首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个八皇后的递归 不明白,该如何解决

2012-03-24 
一个八皇后的递归 不明白#includestdio.h#includemath.hvoid display(int board[],int nSize 8){sta

一个八皇后的递归 不明白
#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值。
[解决办法]
递归就是再函数内部调用其自身
[解决办法]

探讨
尤其是这个 fill_queen(board,nRow+1,nSzie);里面的“nRow+1”,我debug nRow发现他的值在变化 ,是谁在给他赋值?
-------------------
你看到的应该是是当前fill_queen函数自身的值,非上一个fill_queen的nRow值。

热点排行