马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这是一个解决八皇后问题的代码,里面有一个return我看不懂,不知道那个return原理是什么,先上代码吧#include<stdio.h>
#include<stdlib.h>
int queens[8] = {0}, count = 0;
int check(int line, int list)
{
for(int i = 0; i < line; i++)
{
if(queens[i] == list)
{
return 0;
}
if((line + list) == (i + queens[i]))
{
return 0;
}
if((line - list) == (i - queens[i]))
{
return 0;
}
}
return 1;
}
void PrintEightQueen()
{
for (int line = 0; line < 8; line++)
{
int list;
for (list = 0; list < queens[line]; list++)
printf("0");
printf("1");
for (list = queens[line] + 1; list < 8; list++){
printf("0");
}
printf("\n");
}
printf("================\n");
}
void EightQueenSurvive(int line)
{
for(int list = 0; list < 8; list++)
{
if(check(line, list))
{
queens[line] = list;
if(line == 7)
{
count++;
PrintEightQueen();
queens[line] = 0;
return;
}
EightQueenSurvive(line + 1);
queens[line] = 0;
}
}
}
int main()
{
EightQueenSurvive(0);
printf("it has %d methods",count);
system("pause");
return 0;
}
if(line == 7)
{
count++;
PrintEightQueen();
queens[line] = 0;
return;
}
这里面这个return是干嘛的,如果去掉的话count的输出值就是1,加上return的话count的值是92,也就是正确的答案,为什么去掉return后count的值只加了一次1呢?
EightQueenSurvive 这个函数是一个递归函数
if(line == 7)
{
count++;
PrintEightQueen();
queens[line] = 0;
return;
}
里面的return就是递归在line == 7的时候退出递归
count是个全局函数 如果没有return 应该是一个死循环吧
|