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)
View Code

 

posted @ 2019-05-14 16:07  呔!妖精。。。  阅读(159)  评论(0编辑  收藏  举报