递归函数:
在一个函数内调用自己
最大递归层数做了一个限制(只要997,欢乐带回家)
修改参数: import sys(#所有和python相关的设置和方法)
但是尽量别瞎修改
结束递归的标志: return
# def threeLM(menu): # for key in menu : # print(key) # # k = input('>>>') # if k in menu: # threeLM(menu[k]) # # threeLM(menu)
二分查找算法: 就是一种计算的方法
1. 一个数除到不能被2整除为止
def cal(num):
if num %2 == 0: #先判断是否能被二整除
num = num //2 #除2 取整
return cal(num) # 继续扔进去除
else :
return num
print(cal(10))
2. l = [1,2,3,4,7,11,23,65,89,107,654,7675,9782]
基础版:
def find(l,aim):
mid = len(l)//2 #取整
if l[mid] >aim:
new_l = l[ :mid ]
return find(new_l,aim)
elif l[mid]<aim :
new_l = l[mid+1 :]
return find(new_l,aim)
else :
return l[mid]
print(find(l,7675))
进阶版:
def func(l,aim,start = 0,end = len(l)-1):
mid = (start+end )//2
if not l[start:end+1]:
return
elif aim > l[mid]:
return func(l,aim,mid+1,end)
elif aim < l[mid]:
return func(l,aim,start,mid-1)
elif aim == l[mid]:
print('bingo')
return mid
index = func(l,98)
递归解决的问题:
就是通过参数来控制每一次调用,缩小计算的规模
适合的场景:
就是数据的规模在减小,但是解决问题的思路没有发生改变
结束递归的标志:
return