day16 -- 递归函数,二分查找
Posted lianghui-lianghui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day16 -- 递归函数,二分查找相关的知识,希望对你有一定的参考价值。
一,递归函数
1,1初始递归
递归函数 : 在一个函数里调用这个函数本身
递归的最大深度 : 998
递归函数如果不受外力的阻止会一直执行下去,但是函数的每次调用都会产生一个属于自己的名称空间,如果一直调用下去的话,会出现名称空间过多导致的内存问题,所以为了避免这种现象,强制将递归层数控制在了997
def foo(n): print(n) n = n + 1 foo(n) foo(1
1,2 ,递归示例
问alex多大了,告诉你alex比egon大两岁,
然后去问egon多大了,egon说我比wusir大两岁,
然后又去问wusir,wusir说他比太白大两岁,
然后去问太白,太白说他18,这样就可以计算出alex到底多大了
age(4) = age(3) + 2 age(3) = age(2) + 2 age(2) = age(1) + 2 age(1) = 18
然后我们用函数表示
def age(n): if n == 1: return 18 else: return age(n - 1) + 2 print(age(4)) #24
解析:
def age(4):
if n == 1:
return 26
else:
return age(3) + 2
def age(3):
if n == 1:
return 26
else:
return age(2) + 2
def age(2):
if n == 1:
return 26
else:
return age(1) + 2
def age(1):
if n == 1:
return 26
else:
return age(0) + 2
print(age(4))
age(4) = 26 + 2 + 2 + 2
二: 二分查找算法
是最经典最简单的算法
前提: 有序的,不重复的数字序列
l1 = [1, 2, 4, 5, 7, 9] def two_search(l,aim,start=0,end=None): end = len(l)-1 if end is None else end mid_index = (end - start) // 2 + start if end >= start: if aim > l[mid_index]: return two_search(l,aim,start=mid_index+1,end=end) elif aim < l[mid_index]: return two_search(l,aim,start=start,end=mid_index-1) elif aim == l[mid_index]: return mid_index else: return ‘没有此值‘ else: return ‘没有此值‘ print(two_search(l1,9))
以上是关于day16 -- 递归函数,二分查找的主要内容,如果未能解决你的问题,请参考以下文章
oldboy seventeenth day. I love Python. 万恶之神: 递归; 初始算法: 二分查找;