python学习笔记 | 递归思想

1、引子

   大师 L. Peter Deutsch 说过:

To Iterate is Human, to Recurse, Divine.

       中文译为:人理解迭代,神理解递归

2、什么是递归

def fun():
    print("dd")
    fun()
fun()

3、缺点

  • 占内存

RecursionError: maximum recursion depth exceeded while decoding a JSON array from a unicode string

递归错误:超过递归的最大深度(不大于1000)

错误原因:python从内存角度出发做的限制

修改自身最大深度:

import sys
sys.setrecursionlimit(10000)#设置最大深度10000

ps:如果递归次数太多,就不适合使用递归来解决问题(太占内存)

4、优点

  • 代码更简练
  • b格更高

5、应用

  • 二分查找算法
    def find(list,aim):
        mid_index = len(list) // 2
        print(list[mid_index])
        if list[mid_index] < aim:
            find(list[mid_index +1:] ,aim)
        elif list[mid_index] > aim:
            find(list[:mid_index] ,aim)
        else:
            print('找到了',mid_index,list[mid_index])
    list=[1,2,3,4,5,6,7,8,9,10]
    find(list,7)

    优化:

    def find2(list,aim,start=0,end=None):#优化二分查找
        end = len(list) if end == None else end
        mid_index=(end-start) // 2 + start
        print(mid_index)
        if list[mid_index] < aim:
            find2(list,aim,start=mid_index+1,end=end)
        elif list[mid_index] > aim:
            find2(list,aim,start=start,end=mid_index-1)
        else:
            print('找到了', mid_index, list[mid_index])
    list=[1,2,3,4,5,6,7,8,9,10]
    erfind2(list,7)

猜你喜欢

转载自www.cnblogs.com/billie52707/p/12810725.html