python 递归
递归
递归(Recursion Algorithm, 递归算法)通过重复将问题分解为同类子问题而解决问题的方法。
递归思想:
- “重复”,即凡是通过循环语句可以实现的,都可以通过递归来实现
- “将问题分解为同类的子问题”,如持续循环的运算操作,持续循环的判断操作,他们的每次循环都是同样的一个“动作”,这个“动作”就是一个子问题。
e.g.1:
1 # -*- ecoding: utf-8 -*- 2 # @ModuleName: rasum 3 # @Function: 4 # @Author: Zhangjie 5 # @Time: 2021/8/23 23:58 6 7 def ra_sum(start): 8 if start == 1: 9 return start 10 order = ra_sum(start-1) + start 11 print("第%d次递归" % start) 12 print('返回值:%d,在内存中的地址:%d' % (order, id(order))) 13 return order 14 15 16 #循环实现 17 def sum1(start): 18 i = 1 19 add = 0 20 while i <= start: 21 add = add + i 22 i += 1 23 return add 24 25 26 27 28 if __name__ == '__main__': 29 #print(sum1(6)) 30 print(ra_sum(6))
输出结果:
第2次递归 返回值:3,在内存中的地址:52392096 第3次递归 返回值:6,在内存中的地址:52392144 第4次递归 返回值:10,在内存中的地址:52392208 第5次递归 返回值:15,在内存中的地址:52392288 第6次递归 返回值:21,在内存中的地址:52392384 21
从示例中可以看出:
每递归一次,代码在内存中开辟新的保存运算过程的地址空间,记录运算过程。(你是否曾经有过中间值应该放哪里的问题)
递归算法其实分缩小范围和求取结果的层层返回两大步骤。
递归的实质是调用栈的进栈,出栈操作过程。
每递归调用自己一次就进栈一次,并在栈列表里记录调用的内容,每返回一次就是出栈弹出值的过程,并把值返回到上一个栈列表里,最终求出结果。
(栈的性质:先进后出,后进先出)
一图胜千言

思考
1 递归算法的复杂度
2 使用递归算法实现二分查找
3 如何使用Python内置装饰器优化递归
转载请注明出处

浙公网安备 33010602011771号