递归调用与二分法——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)

posted @ 2018-12-03 15:40  WenChen-0o0  阅读(88)  评论(0编辑  收藏  举报