递归调用与二分法——day14
函数的递归调用
再函数嗲用的过程中有直接或者间接地调用该函数本身,称之为递归调用
递归调用必须满足两个条件:
1.没进入下一次递归调用,问题的规模都应该有所减少
2.递归必须有一个明确的结束条件
# 以下递归只是单纯的重复,没有意义
# def func():
# print(1)
# print(2)
# print(3)
# func()
#
# func()
# def bar():
# print('from bar')
# foo()
#
# def foo():
# print('from foo')
# bar()
#
# foo()
递归有两个明确的阶段:
1. 回溯
2. 递推
l=[1,[2,[3,[4,[5,[6,[7,[8,[9,]]]]]]]]]
def func(list1):
for item in list1:
if type(item) is not list: ——type判断item的类型是不是list
print(item)
else:
# 如果是列表,应该...————不是list 应该继续for循环 if判断 添加n层
func(item)
func(l)
—————————————————分隔线———————————————————————
判断list 内有没有输入的值
# nums=[3,5,7,11,13,23,24,76,103,111,201,202,250,303,341]
# find_num=203
# for num in nums:
# if num == find_num:
# print('find it')
# break
# else:
# print('not exists')
nums=[3,5,7,11,13,23,24,76,103,111,201,202,250,303,341]
def binary_search(list1,find_num):————list1传入要循环的列表,find_num要查找的值
print(list1)——————查看分隔情况
if len(list1) == 0:————————如果列表里面没有值得话
print('not exist')
return
mid_index=len(list1) // 2————————取中间值
if find_num > list1[mid_index]:—————————判断中间值是否小于要判断的数
# in the right
binary_search(list1[mid_index + 1:],find_num)
elif find_num < list1[mid_index]:—————————判断中间值是否大于要判断的数
# in the left
binary_search(list1[:mid_index],find_num)
else:
print('find it')——————相等就输出他
binary_search(nums,203)