#算法#第31天,我终于被递归打败了,禁止套娃太应该了!( 二 )


本文插图
258集 , 递归实现数字累加
需求:定义一个函数 sum_numbers;能够接收一个 num 的整数参数 , 计算 1+2+......+num 的结果 。
写递归程序时候 , 第一步就要考虑出口问题 。
#算法#第31天,我终于被递归打败了,禁止套娃太应该了!
本文插图
这个程序有点没看懂 , 比如:
他第一句说根据需求倒过来考虑出口是啥意思?
把数字1当成出口的概念是倒序计算吗?
为什么要设定出口是 num ==1?
为啥 return 是 1?
设定temp 的逻辑是怎么来的?
他这个假设 sum_numbers 能够正确处理累计 , 这个假设意义何在?
#算法#第31天,我终于被递归打败了,禁止套娃太应该了!
本文插图
259集 , 数字累加的执行流程图
用配图再次演练上一集案例 , 这次得带着疑问好好听课了 。
#算法#第31天,我终于被递归打败了,禁止套娃太应该了!
本文插图
验证了我上一集的猜测 , 确实是数字是从大到小开始进行调用 , 然后再从小到大开始进行相加 。
所以关键点是2个:
第一个:把数字1作为出口 , 因为1是最后一次函数调用的结果 。
第二个:大胆的假设 , 实现加法 。
这个思维实际上就是逆向思维 。
不得不说 , 想出这些算法思路的人 , 真是天才!
提示:递归是一个 编程技巧 , 初次接触递归会感觉有些吃力 。 在处理 不确定的循环条件时 , 格外的游泳 , 例如:遍历整个文件目录的结构 。


推荐阅读