小甲鱼的铁粉 发表于 2020-8-17 18:04:49

c语言的return

这是一个解决八皇后问题的代码,里面有一个return我看不懂,不知道那个return原理是什么,先上代码吧
#include<stdio.h>
#include<stdlib.h>
int queens = {0}, count = 0;
int check(int line, int list)
{
    for(int i = 0; i < line; i++)
    {
      if(queens == list)
      {
            return 0;
      }
      if((line + list) == (i + queens))
      {
            return 0;
      }
      if((line - list) == (i - queens))
      {
            return 0;
      }
    }
    return 1;
}
void PrintEightQueen()
{
    for (int line = 0; line < 8; line++)
    {
      int list;
      for (list = 0; list < queens; list++)
            printf("0");
      printf("1");
      for (list = queens + 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 = list;

            if(line == 7)
            {
                count++;
                PrintEightQueen();
                queens = 0;
                return;
            }
            EightQueenSurvive(line + 1);
            queens = 0;
      }
    }
}
int main()
{
    EightQueenSurvive(0);
    printf("it has %d methods",count);
    system("pause");
    return 0;
}

if(line == 7)
{
   count++;
   PrintEightQueen();
   queens = 0;
   return;
}
这里面这个return是干嘛的,如果去掉的话count的输出值就是1,加上return的话count的值是92,也就是正确的答案,为什么去掉return后count的值只加了一次1呢?

zltzlt 发表于 2020-8-17 18:08:55

这里的 return 作用是直接退出函数

小甲鱼的铁粉 发表于 2020-8-17 18:17:42

zltzlt 发表于 2020-8-17 18:08
这里的 return 作用是直接退出函数

退出EightQueenSurvive吗?

zltzlt 发表于 2020-8-17 18:17:59

小甲鱼的铁粉 发表于 2020-8-17 18:17
退出EightQueenSurvive吗?

是的

小甲鱼的铁粉 发表于 2020-8-17 18:18:25

zltzlt 发表于 2020-8-17 18:08
这里的 return 作用是直接退出函数

那为什么没有return的话count的值加不上呢?

tttxiaoz 发表于 2020-8-18 10:28:26

EightQueenSurvive 这个函数是一个递归函数
if(line == 7)
            {
                count++;
                PrintEightQueen();
                queens = 0;
                return;
            }
里面的return就是递归在line == 7的时候退出递归
count是个全局函数如果没有return 应该是一个死循环吧
页: [1]
查看完整版本: c语言的return