python 递归

递归

  递归(Recursion Algorithm, 递归算法)通过重复将问题分解为同类子问题而解决问题的方法。

  递归思想:  

  1. “重复”,即凡是通过循环语句可以实现的,都可以通过递归来实现
  2. “将问题分解为同类的子问题”,如持续循环的运算操作,持续循环的判断操作,他们的每次循环都是同样的一个“动作”,这个“动作”就是一个子问题。

 

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内置装饰器优化递归

 

转载请注明出处

 

posted @ 2021-08-24 09:03  甲壳虫~~~  阅读(52)  评论(0)    收藏  举报