首页 新闻 会员 周边 捐助

一个C语言的递归问题

0
悬赏园豆:10 [已解决问题] 解决于 2019-12-07 10:18

include <stdio.h>

void p(int x)

{

if(x==1)

{

    printf("A");

}

else

{

    p(x-1);

    printf("%c",'A'+x-1);

    p(x-1);

}

}

int main()

{

int n;

scanf("%d",&n);

p(n);

}

为什么当那个进行了几次递归之后,当x变为1时输出了A,马上接下来x就变为了2??为什么会变化呢???

shmily涂的主页 shmily涂 | 初学一级 | 园豆:4
提问于:2019-12-03 19:45
< >
分享
最佳答案
0

p(x-1);
printf("%c",'A'+x-1);
p(x-1);

因为这里啊,先p了x-1, 再打印 ,后面再p了一个x-1

这个同汉诺塔一样,你研究一下汉诺塔。

收获园豆:10
gw2010 | 小虾三级 |园豆:1487 | 2019-12-04 11:55
其他回答(1)
0

因为 p(1) 是由 p(2) 中的 else部分调用的,当 p(1) 执行完,就返回到 p(2),x就变成了2。

enjoyN | 园豆:209 (菜鸟二级) | 2019-12-03 21:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册