递归问题
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;
} num 没有等于2啊
你写的是
arrange(begin, num/2);
arrange(begin + num/2, num/2);
如果 num 开始等于2的话;递归就是 num/2就是 1 啊 Max472 发表于 2021-8-31 10:24
num 没有等于2啊
你写的是
arrange(begin, num/2);
假设输入的是4,第一次没有进 if 语句,然后进入递归 num/2,这时num不是等于2了吗,num 第二次进入递归的时候 你函数的返回呢
不等于2就没返回值啦 万千只cnm 发表于 2021-8-31 10:42
你函数的返回呢
不等于2就没返回值啦
这个函数的意义不是为了把数据放入数组吗,我试了一下,在输入值为4的情况下,这个 if 语句只用了一次 hanianshao 发表于 2021-8-31 10:49
这个函数的意义不是为了把数据放入数组吗,我试了一下,在输入值为4的情况下,这个 if 语句只用了一次
我的没问题呀 递归进去了很多次 万千只cnm 发表于 2021-8-31 19:03
我的没问题呀 递归进去了很多次
递归是进去了,但那个 if 语句只进去了一次,如果进入 if 语句,输入的值需要是2的n次方,那不是再怎么递归都进入 if 语句,然后 return 0;
然后hxd,我刚刚点错了不小心点了个反对你这个回答,抱歉 你return 0也只执行了一次啊,所以你只结束了num==2的那一个函数啊其他的又没动,因为你的num没变过,不管你num填多少进去都最多只可能执行一次if条件,剩下的就属于杀了没管埋的了,你大概是理解错了递归,或者是你没搞懂形参和实参的概念
页:
[1]