函数的递归调用和二分法

一. 递归调用

  在调用一个函数过程中又直接或间接地调用了函数自身

  条件: 1. 每进入下一次递归调用,问题的规模都有所减少

      2. 递归必须有一个明确的结束条件

   阶段: 回溯和递推

# 打印出 lis=[1,[2,[3,[4,[5,[6,[7,[8,]]]]]]]] 中的每一个数字
lis=[1,[2,[3,[4,[5,[6,[7,[8,]]]]]]]]
def func(list1):
    for item in list1:
        if type(list1) is not list:
            print(item)
        else:
            func(item)


func(lis)

二. 二分查找法

  在有序排列中找到给定的数,可以将制定的数和有序排列的中间数做比较,若小于中间数,则再与前一半数的中间数做对比,一次类推

# 例: 在nums=[3,5,7,11,13,23,24,76,103,111,201,202,250,303,341] 中查看是否有201 这个数

nums=[3,5,7,11,13,23,24,76,103,111,201,202,250,303,341]
def search_number(list1, number):
    if len(list1)==0:
        print ('没找到')
        return
    else:
        mid_index=len(list1) //2
        mid_num=list1[mid_index]
        if number<mid_num:
            list1=list1[:mid_index]
            search_number(list1,number)
        elif number > mid_num:
            list1=list1[mid_index+1:]
            search_number(list1,number)
        else:
            print('找到了')

search_number(nums,22)

  

 

原文地址:https://www.cnblogs.com/Afrafre/p/10059136.html