• 函数的递归调用和二分法


    一. 递归调用

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

      条件: 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)
    

      

     

  • 相关阅读:
    循环链表问题
    非常有用的编程学习网站
    我的单例模式(C++)
    C# xml解析
    设计模式趣解
    简单工厂(C++)
    贝塞尔曲线 原理
    C++ 1.#QNAN0;1.#QNAN0
    [NOI2018]屠龙勇士 excrt
    [NOI.AC#30]candy 贪心
  • 原文地址:https://www.cnblogs.com/Afrafre/p/10059136.html
Copyright © 2020-2023  润新知