python进阶之 ——函数的递归调用与二分法
递归
1.递归调用:在调用一个函数的过程又直接或间接地调用该函数本身
递归必须满足两个条件:
I.每进入下一次递归调用,问题的规模都应该有所减少
II.递归必须有一个明确的结束条件‘
递归有两个明确的阶段
I.回溯 :一层一层地递归调用下去
II.递推 :在某一层结束掉递归,然后一层一层返回
2.为何用
在某些情况下,基于递归来使用重复的过程比while循环更简单
3.如何用
一个嵌套很多层的列表,用递归取出所有的值 l = [1, [2, [3, [4, [5, [6, [7, [8, ]]]]]]]] def func1(listl): for item in listl: if type(item) is not list: print(item) else: func1(item) func1(l) #or def get(seq): for item in seq: if type(item) is list: get(item) else: print(item) get(l)
二分法
二分法是算法的一种,算法是如何高效地解决问题的思路
nums = [1, 13, 15, 23, 27, 31, 33, 57, 73, 81, 93, 94, 97, 101] # 从小到大排列的数字列表 def binary_search(find_num,nums): print(nums) if len(nums) == 0: print('not exists') return # 功能 mid_index = len(nums) // 2 if find_num > nums[mid_index]: # in the right nums=nums[mid_index+1:] # 重新运行功能,传入新列表 binary_search(find_num,nums) elif find_num < nums[mid_index]: # in the left nums=nums[:mid_index] # 重新运行功能,传入新列表 binary_search(find_num,nums) else: print('find it') # binary_search(97,nums) binary_search(95,nums)