关于递归和getchar一些疑问~我是新手,谢谢

h1_h2_h4 2012-03-12 08:11:06
#include<stdio.h>
void main()
{
int i = 5;
void palin(int n);
printf("40:");
palin(i);
printf("\n");
}
void palin(int n)
{
char next;
if(n<=1)
{
next = getchar();
printf("\n\0:");
putchar(next);
}
else
{
next = getchar();
palin(n-1);
putchar(next);
}
}
本人新手,在练习网上下载的“C语言100道经典题”虽然不知道有没用,但还是认真打算把一百道练到,领会下精华
遇到问题了

重点在自定义函数“palin”的else语句那里。在“next = getchar();”后面是个递归“palin(n-1);”递归后面的语句竟然还会执行。
我的想法是,程序是顺序执行的,在执行到递归用的“palin”函数后不是应该从自定义函数的头开始吗,怎么还会执行palin(n-1)后面的putchar(next),搞不懂,想了很久,我了解了很久关于getchar()的运作方式,但是还是不能解决疑问,求高手解答。

我在简化下问题,就是自定义函数“ palin(n-1);”后面的putchar(next);会被执行,不是这时要从头开始吗?
...全文
245 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengfoo 2012-03-12
  • 打赏
  • 举报
回复
递归 先从简单的递归程序开始。了解递归的思想。
递归其实不复杂,就是一个函数不断调用自身,但这样的调用不是无穷次的,有某个条件限制,每次调用后,都离该条件更近了不,当满足限制条件后,就不再调用了。
northcan 2012-03-12
  • 打赏
  • 举报
回复
else
{
next = getchar();
palin(n-1);
putchar(next);
}

如果执行了palin(n-1);那么putchar(next);就必然会被执行,否则程序永远停在palin(n-1);,那岂不是死循环了。

palin是一个递归函数,但递归函数总有结束递归的时候,如果递归永远不能结束,那么它将一直运行下去直到耗尽cpu的资源,那这个递归函数就有问题了。

楼主的palin函数,总有if(n<=1)成立的时候,也就是palin递归函数总有执行完毕的时候,当递归函数由内层到外层执行完毕之后,就会执行putchar(next);了。楼主可以用IDE的调试功能,单步调试一下会更清楚。
aliqing777 2012-03-12
  • 打赏
  • 举报
回复
递归之后,函数还得返回,,返回以后继续顺序执行
ProgrammingRing 2012-03-12
  • 打赏
  • 举报
回复
弄个小点的递归,然后单步跟下就知道咋回事了

70,035

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧