今日偶遇一道c语言递归的题,因为之前对此也是一知半解,这次仍然没有做对。认真分析后,在此做下笔记。题目如下:
右侧是输出结果。
分析: x=3,调用join(x),x++后,再次调用join(x),直到调用join(7),x++之后,x=8,所以return。但是注意此时的return是join(7),所以调用printf打印是7,然后再逐一返回。
首先先要搞清楚递归的原理
压入 第一次,第二次,第三次,第四次,第五次
第五次return后,开始弹出第四次,第四次完了,弹出第三次。。。。以此类推,则打印出7654.
另外主函数定义x=3,经过join递归之后,由于操作的不是同一栈,即不是同一地址,所以在main函数中x的值并不会发生变化,仍为3.
另有关于递归函数return的问题可以参考https://blog.csdn.net/thecape/article/details/82464598
里面有两个例子不错,帮助理解。