c语音新手入门,谁能帮我解释一下代码,有点不理解

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/001962739746116

img


.jpg "#left")

sub函数是一个递归函数,计算 n+n-1+...+1的和

main函数中,i = 5,printf中 调用 sub(5),过程如下:

(1)sub(5) 中,n = 5, 执行 a = 5 + sub(4); 返回a的值
(2)sub(4) 中,n = 4, 执行 a = 4 + sub(3); 返回a的值
(3)sub(3) 中,n = 3, 执行 a = 3 + sub(2); 返回a的值
(4)sub(2) 中,n = 2, 执行 a = 2 + sub(1); 返回a的值
(5)sub(1) 中,n = 1, 执行 return 1,也就是sub(1)=1
从下往上带回去,就得到sub(5)的值

sub是一个递归函数 递归函数就是 函数内部调用函数自己,直到达到退出条件,再逐层返回
示例代码中sub函数的代码运算过程就是
a = 5 + sub(4) +sub(3) +sub(2) + sub(1) 到达1之后 满足了函数内部的退出条件if(n == 1) return 1;
然后从后面往前 将上一步函数的返回值代换到公式中就是如下过程:
sub(2) 中a = 2 + sub(1)等价于 2 + 1 a = 3 返回a
sub(3)中 a = 3 +sub(2)等价于 3 + 3 a = 6 返回a
sub(4)中 a = 4 + sub(3) 等价于 4 + 6 a = 10 返回a
sub(5)中 a = 5 + sub(4) 等价于 5 + 10 a = 15 返回a
sub函数执行完毕后 返回的a的值就是15 也就是
a = 5 + 4 + 3 + 2 + 1
a = 15

递归函数的执行过程可以这样想象下
你站在二楼楼梯前 你脚下的每一个台阶上都有一块钱,然后规定你必须要先下到一楼,然后一步一步上台阶 捡一块钱上一步台阶 直至上到二楼捡完所有的钱,这些钱的总数就是递归函数最终的返回值

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632