0408 递归函数 二分查找算法

一、递归函数

递归函数:在一个函数里在调用这个函数本身。

递归的最大深度:998

def foo(n):
    print(n)
    n += 1
    foo(n)
foo(1)

修改默认值后
import sys
sys.setrecursionlimit(10000)
def func1(n):
n += 1
print(n)
func1(n)
func1(0)
本机可以达到866

示例讲解

alex老师多大了,alex比 egon 大两岁,egon比武sir大两岁,武sir比太白大两岁,
太白18了,那alex多大?
def age(n):
if n == 1:
return 18
else:
return age(n-1)+2
print(age(4)) # age(3) + 2 age(2) + 2 + 2 18 + 2 + 2 + 2

二、二分查找法

前提,有序且唯一的数字数列
l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
找到66的序号
print(l.index(66))
sum=0
for i in l:
if i == 66:
print(sum)
break
sum += 1
1,aim 6
2,aim与list的中间的数进行比较mid,aim > mid 取mid --end 中间的数与aim在进行比较
3,aim与list的中间的数进行比较mid,aim < mid 取start --min 中间的数与aim在进行比较


l = [2, 3, 5, 10, 15, 33, 55]
def two_search(li, aim, start=0, end=None):
#end=None
end = len(li) if end is 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=start, end=mid_index-1) #([2,3,5],3)
elif li[mid_index] == aim:
return mid_index
else:
return '没有此值'
else:
return '没有此值'
print(two_search(l,100))
posted @ 2018-04-09 20:03  Murray穆  阅读(167)  评论(0编辑  收藏  举报