python学习笔记 | 递归思想
作者:互联网
1、引子
大师 L. Peter Deutsch 说过:
To Iterate is Human, to Recurse, Divine.
中文译为:人理解迭代,神理解递归
2、什么是递归
- 简单理解:在一个函数中调用自身
- 更多内容:https://www.zhihu.com/question/20507130/answer/15551917
- 例:
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)
标签:index,end,递归,python,list,mid,笔记,aim,start 来源: https://www.cnblogs.com/billie52707/p/12810725.html