首页 > 编程语言 > 详细

python学习笔记 | 递归思想

时间:2020-04-30 19:17:56      阅读:66      评论:0      收藏:0      [点我收藏+]

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)

     

python学习笔记 | 递归思想

原文:https://www.cnblogs.com/billie52707/p/12810725.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!