理解C语言递归输出:按值传参funky函数执行结果问询
问题解答
问题1:代码运行后的打印输出
你给出的是老式K&R风格C代码,遵循旧C标准的规则:未显式声明类型的函数参数、函数返回值默认是
int类型,因此x的类型可以确定为int,不存在类型不确定的问题。
该函数为按值传参的递归函数,每次调用的x都是独立副本,执行逻辑推导如下:
- 顶层调用
funky(5),x初始为5,满足x>0,x自减为4,调用funky(4),等待递归返回后再执行打印 funky(4)中x初始为4,满足x>0,x自减为3,调用funky(3),等待递归返回后再执行打印funky(3)中x初始为3,满足x>0,x自减为2,调用funky(2),等待递归返回后再执行打印funky(2)中x初始为2,满足x>0,x自减为1,调用funky(1),等待递归返回后再执行打印funky(1)中x初始为1,满足x>0,x自减为0,调用funky(0),等待递归返回后再执行打印funky(0)中x初始为0,不满足判断条件,直接执行打印,输出0,后返回上层- 回到
funky(1)的递归调用后,执行打印,输出当前x值0,后返回上层 - 回到
funky(2)的递归调用后,执行打印,输出当前x值1,后返回上层 - 回到
funky(3)的递归调用后,执行打印,输出当前x值2,后返回上层 - 回到
funky(4)的递归调用后,执行打印,输出当前x值3,后返回上层 - 回到
funky(5)的递归调用后,执行打印,输出当前x值4,后结束
最终输出结果为:0,0,1,2,3,4,
问题2:相关逻辑疑问解答
- 不是tester的相关值传入顶层funky:tester函数中是直接把常量5作为参数传递给顶层funky,和tester本身的返回值、内部其他变量没有关联。
- 不可能仅打印4:因为函数是递归实现,会先逐层调用进入最内层,再逐层返回执行每层的打印逻辑,会输出所有递归层级的x值,不会只打印4。
内容的提问来源于stack exchange,提问作者Umbral Chaos
相关产品推荐
相关产品推荐

