使⽤python来详解递归相加(+n)内部调⽤全过程。⾸先看以下代码 ,⼀个sum函数,接收⼀个递加的最⼤值,判断为1返回1,否则调⽤⾃⾝,传递的参数为当前参数减去1,最后完成求和。
def sum(max_num):
if max_num == 1:
return 1
else:
return max_num + sum(max_num - 1)
print(sum(5))
# 结果 15
开始执⾏函数 sum(5)
第⼀次循环:传递参数为5,不符合if条件,跳转到else分⽀,执⾏了以下代码:
return 5 + sum(5 - 1)
为了求得 sum(5 - 1)的值,进⼊了递归调⽤
第⼆次循环:传递参数为4,不符合if条件,跳转到else分⽀,执⾏了以下代码:
return 4 + sum(4 - 1)
注意:此时的 `4 + sum(4 - 1)` 是为了得到第⼀次循环中 `sum(5 - 1)`的值)
第三次循环,传递的参数为3,不符合if条件,跳转到else分⽀,执⾏了以下代码:
return 3 + sum(3 - 1)
此时的 `3 + sum(3 - 1)` 是为了得到第⼆次循环中 `4 + sum(4 - 1)`的值)
第四次循环,传递的参数为2,不符合if条件,跳转到else分⽀,执⾏了以下代码:
return 2 + sum(2 - 1)
此时的 `2 + sum(2 - 1)` 是为了得到第三次循环中 `3 + sum(3 - 1)`的值)
第五次循环,传递的参数为1,符合if条件,返回1:
菜鸟教程python如何用函数将长度不同的数列相加return 1
现在进⼊关键阶段: 我们需要将递归调⽤展开的函数,依次计算值。
1. 第五次循环中,传递了1,符合if条件,直接返回了1;
2. 那么第四次循环中的 2 + sum(2-1)也就有了答案 ,完整的执⾏语句是 2 + 1
3. 那么第三次循环中的 3 + sum(3-1)也就有了答案,完整的执⾏语句是 3 + 3
4. 那么第⼆次循环中的 4 + sum(4-1)也就有了答案,完整的执⾏语句是 4 + 6
5. 那么第⼀次循环中的 5 + sum(5-1)也就有了答案,完整的执⾏语句是 5 + 10最终得到15
以上是我个⼈理解,如有错误,请在评论区留⾔。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论