1.初始递归
递归属于函数中的一种特殊函数,功能迅速并且干净利落,在函数中递归的基本就是在函数中调用自己本身
def func(): print(111) func() func()#将会无限循环‘111’并且在第998次的时候停止,python内部的保护机制。
2.递归中的保护机制
由于递归是调用自身那么将会面对一个严重的问题,那就是会不断的调用自己,并且不断创建一个新的空间,占用大量内存,由此python给予递归一个保护内存的方法,就是使得递归调取自身998次后就会出现报错并且会很快停止。
def func(n): n += 1 print(n) func(n) func(0) #结果: 995 996 997 998Traceback (most recent call last): File "C:/Users/Administrator/PycharmProjects/untitled2/day15/地柜.py", line 46, in <module> func(0)#将会无限循环‘111’并且在第998次的时候停止,python内部的保护机制。 File "C:/Users/Administrator/PycharmProjects/untitled2/day15/地柜.py", line 45, in func
但是有一个有趣的模块能够修改递归中的最大上限,sys.setrecursionlimit() ,sys模块中的setrecursionlimit()指令,能够将递归中的保护机制最大上限改变。
import sys sys.setrecursionlimit(10000) def func(n): n += 1 print(n) func(n) func(0) 结果: 3804 3805 3806 3807 windows系统大都是在3800左右,而ios和linux一般都在20000左右,由此看出电脑的基本性能,有兴趣的可以试试
3.二分法用递归
在字典的查询中二分法使用的最频繁,
li = [1,2,3,4,5,6,7,8,9,10] def two_search(li,aim) # li = [1,2] def two_search(li, aim, start=0, end=None): end = len(li)-1 if end == None else end mid_index = (end - start) // 2 + start # 3 if start <= end: if li[mid_index] < aim: return two_search(li,aim,start=mid_index+1,end=end) elif li[mid_index] > aim: return two_search(li,aim,start=0,end=mid_index-1) #([2,3,5],3) elif li[mid_index] == aim: return mid_index else: return '没有此值' else: return '没有此值' print(two_search(li,3))#暂时不理解!!!!