一、函数的递归和二分法
1、什么是函数的递归调用?
def foo():
print('hello')
foo()
>>> hello
>>>...
>>>RecursionError: maximum recursion depth exceeded while calling a Python object
def bar():
print('from bar')
foo()
def foo():
print('hello')
bar()
foo()
>>>hello
>>>from bar
>>>....
>>>RecursionError: maximum recursion depth exceeded while calling a Python object
import sys
print(sys.getrecursionlimit())
>>> 1000
print(sys.setrecursionlimit(2000))
print(sys.getrecursionlimit())
>>> 2000
2、递归调用应该分为两个阶段
# 1、回溯(挖井):一层一层地递归调用下去
# 2、递推(从井里往外跳):在满足某一条件的情况下结束回溯,然后开始向上一层层返回
def salary(n):
if n == 1:
return 18
return salary(n-1) + 10
res=salary(5)
print(res)
nums=[111,[222, 333,[444,[555,[666,[777,[888,[999]]]]]]]]
def func(l):
for x in l:
if type(x) is list:
func(x)
else:
print(x)
func(nums)
3、二分法
nums = [11,22,33,44,55,66,77,88,99,100,101,111,121]
def search(l,find_num):
print(l)
if len(l) == 0:
print('find num not exists')
return
mid_index = len(l) // 2
if find_num > l[mid_index]:
right_l = l[mid_index + 1:]
search(right_l,find_num)
elif find_num < l[mid_index]:
left_l = l[:mid_index]
search(left_l,find_num)
else:
print('find it')
search(nums,88)