C语言高手请进解释一段递归函数代码

2025-01-04 04:21:12
推荐回答(3个)
回答1:

问题一:函数dx执行else中next=getchar()后是再次运行函数吗?
答:其后面没有中断执行的语句,进入else之后就会递归。

问题二:这段代码究竟是如何实现将输入的5个字符倒叙输出的,求高手一步一步模拟运行或者解释一下
答:一步一步来吧。
首先:dx(i); 就是dx(5)直接进入else
然后获得一个字符,存,记为next5。
然后递归dx(4)
然后获得一个字符,存,记为next4。
然后递归dx(3)
....
以此类推,直到:
if(n<=1) 即调用dx(1)的时候,也就是说存了next2-5
然后输出:
printf( "倒序为: ");
putchar(next);
把刚才输入的最后一个next输出了,
然后返回,dx(2), putchar(next); 即输出next2
然后返回,dx(3), putchar(next); 即输出next3
....
以此类推,输出到所有的dx(5)
整体返回。

回答2:

这个程序原理是很简单的,只要你将参数带进去一步步跟下去就好了,除非你看不懂C代码。
教你一个学习的方法,就是对程序进行调试,单步跟踪运行,看程序是怎样一步步执行下去的。要想技术有很快的提高还得自己动手,以后还会有很多比这个更难的程序,如何你学会了如何去调试你的代码,那对你以后的帮助是不可估量的,而且简单的调试也是很容易学会的。 像你这样的智商相信应该两个小时就能搞定了。

回答3:

问题一:楼主说的没错
函数dx执行else中next=getchar(),也就是我们输入一个数,
然后运行下一句dx(n-1);
就是从void dx(int n) /*声明倒序函数*/ 处运行
问题二:
说明之前要先搞清楚一件事情,就是getchar()只是将数取进来存在一个位置,
它并不会消失,然后等于putchar()的时候这个数才会被显示出来(显示在屏幕上)

先令我们要输入5个数a1、a2、a3、a4、a5
开始时i=5,进入dx(5)
此时i>1,进入else,输入a1
然后进入dx(4),同样进入else,输入a2 (注意此时a1还存在着,只是没有它出场的机会)
直到dx(1)时进入if(……),输出a5
然后dx(1)完成后,回到dx(2),把dx(2)的else的putchar(next),输出a4
^……
然后就得到倒序数列了