python 递归函数和二分查找
1.初始递归
递归属于函数中的一种特殊函数,功能迅速并且干净利落,在函数中递归的基本就是在函数中调用自己本身
1 2 3 4 | def func(): print ( 111 ) func() func() #将会无限循环‘111’并且在第998次的时候停止,python内部的保护机制。 |
2.递归中的保护机制
由于递归是调用自身那么将会面对一个严重的问题,那就是会不断的调用自己,并且不断创建一个新的空间,占用大量内存,由此python给予递归一个保护内存的方法,就是使得递归调取自身998次后就会出现报错并且会很快停止。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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()指令,能够将递归中的保护机制最大上限改变。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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.二分法用递归
在字典的查询中二分法使用的最频繁,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 )) #暂时不理解!!!! |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步