|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这个代码的输出结果不是很理解。
我理解的是输入2时流程:
up_and_down执行printf("%d\n", n);函数打印2----------》 因为2>0、执行up_and_down(1)------------------》 执行printf("%d\n", n);打印1--------------》因为1>0,所以执行up_and_down(0)----------》 执行printf("%d\n", n)打印0--------------》因为0并不大于0,所以跳出递归执行后面的printf 打印0
按照这种思路分析的话结果是逐次递减的
但是为什么结果最后又逐次上升了?
本帖最后由 jackz007 于 2019-11-11 14:04 编辑
首先,必须明确,函数 up_and_down(n) 在什么情况下会递归到底,那么,什么是递归到底呢?答案就是函数不再调用自己了,显然,up_and_down(n) 递归到底的条件是 n 的值为 0 。
递归函数以底为界,可以划分为进入过程和退出过程,在进入过程中,up_and_down(n) 首先打印了 n 的数值,如果输入了数值 2,那么,在进入过程中,会依次打印数字 "2 "、"1 "、"0 ",然后,进入退出过程,打印 n (如果 n = 0) 或 n - 1(如果 n > 0),所以,退出过程将依次打印"0 "、"0 "、"1 "。最终打印输出的内容就是:"2 1 0 0 0 1"
|
|