hanianshao 发表于 2021-8-31 09:26:04

递归问题

arrange函数在下面调用自身的时候,num 再次等于2,不是应该继续 if 中的语句,为什么只执行了一次,就继续后面的了?

#include <stdio.h>

#define MAX_NUM 64

int schedule;

int arrange(int begin, int num);

int arrange(int begin, int num)
{
      int i, j;

      if (num == 2)
      {
                schedule = begin;
                schedule = begin + 1;
                schedule = begin + 1;
                schedule = begin;
                return 0;
      }

      arrange(begin, num/2);
      arrange(begin + num/2, num/2);

      for (i = begin + num/2; i < begin + num; i++)
      {
                for (j = num/2 + 1; j <= num; j++)
                {
                        schedule = schedule;
                }
      }

      for (i = begin; i < begin + num/2; i++)
      {
                for (j = num/2 + 1; j <= num; j++)
                {
                        schedule = schedule;
                }
      }
}

int main(void)
{
      int num, i, j;

      printf("请输入参赛的队伍数量:");
      scanf("%d", &num);

      // 检查num是否2的N次方
      // 注意,这里是&,不是&&
      // &是按位与操作,1&1==1,0&1==0,0&0 == 0
      if (num & num - 1)
      {
                printf("参数队伍的数量必须是2的N次方!\n");
                return -1;
      }

      arrange(1, num);

      printf("编 号");

      for (i = 1; i < num; i++)
      {
                printf("\t第%d天", i);
      }

      putchar('\n');

      for (i = 1; i <= num; i++)
      {
                for (j = 1; j <= num; j++)
                {
                        printf("%3d\t", schedule);
                }
                putchar('\n');
      }

      return 0;
}

Max472 发表于 2021-8-31 10:24:44

num 没有等于2啊
你写的是
arrange(begin, num/2);
arrange(begin + num/2, num/2);

如果 num 开始等于2的话;递归就是 num/2就是 1 啊

hanianshao 发表于 2021-8-31 10:36:05

Max472 发表于 2021-8-31 10:24
num 没有等于2啊
你写的是
arrange(begin, num/2);


假设输入的是4,第一次没有进 if 语句,然后进入递归 num/2,这时num不是等于2了吗,num 第二次进入递归的时候

万千只cnm 发表于 2021-8-31 10:42:44

你函数的返回呢
不等于2就没返回值啦

hanianshao 发表于 2021-8-31 10:49:39

万千只cnm 发表于 2021-8-31 10:42
你函数的返回呢
不等于2就没返回值啦

这个函数的意义不是为了把数据放入数组吗,我试了一下,在输入值为4的情况下,这个 if 语句只用了一次

万千只cnm 发表于 2021-8-31 19:03:02

hanianshao 发表于 2021-8-31 10:49
这个函数的意义不是为了把数据放入数组吗,我试了一下,在输入值为4的情况下,这个 if 语句只用了一次

我的没问题呀 递归进去了很多次

hanianshao 发表于 2021-9-2 09:58:00

万千只cnm 发表于 2021-8-31 19:03
我的没问题呀 递归进去了很多次

递归是进去了,但那个 if 语句只进去了一次,如果进入 if 语句,输入的值需要是2的n次方,那不是再怎么递归都进入 if 语句,然后 return 0;
然后hxd,我刚刚点错了不小心点了个反对你这个回答,抱歉

liuxinjordon 发表于 2021-9-7 08:34:11

你return 0也只执行了一次啊,所以你只结束了num==2的那一个函数啊其他的又没动,因为你的num没变过,不管你num填多少进去都最多只可能执行一次if条件,剩下的就属于杀了没管埋的了,你大概是理解错了递归,或者是你没搞懂形参和实参的概念
页: [1]
查看完整版本: 递归问题