zoukankan      html  css  js  c++  java
  • python 递归函数和二分查找

    1.初始递归

      递归属于函数中的一种特殊函数,功能迅速并且干净利落,在函数中递归的基本就是在函数中调用自己本身

    def func():
        print(111)
        func()
    func()#将会无限循环‘111’并且在第998次的时候停止,python内部的保护机制。
    

     2.递归中的保护机制

      由于递归是调用自身那么将会面对一个严重的问题,那就是会不断的调用自己,并且不断创建一个新的空间,占用大量内存,由此python给予递归一个保护内存的方法,就是使得递归调取自身998次后就会出现报错并且会很快停止。

    def func(n):
        n += 1
        print(n)
        func(n)
    func(0)
    #结果:
    995
    996
    997
    998Traceback (most recent call last):
      File "C:/Users/Administrator/PycharmProjects/untitled2/day15/地柜.py", line 46, in <module>
        func(0)#将会无限循环‘111’并且在第998次的时候停止,python内部的保护机制。
      File "C:/Users/Administrator/PycharmProjects/untitled2/day15/地柜.py", line 45, in func
    

       但是有一个有趣的模块能够修改递归中的最大上限,sys.setrecursionlimit() ,sys模块中的setrecursionlimit()指令,能够将递归中的保护机制最大上限改变。

    import sys
    sys.setrecursionlimit(10000)
    def func(n):
        n += 1
        print(n)
        func(n)
    func(0)
    
    结果:
    3804
    3805
    3806
    3807
    
    
    windows系统大都是在3800左右,而ios和linux一般都在20000左右,由此看出电脑的基本性能,有兴趣的可以试试
    

     3.二分法用递归

    在字典的查询中二分法使用的最频繁,

    li = [1,2,3,4,5,6,7,8,9,10]
    def two_search(li,aim)
    # li = [1,2]
    def two_search(li, aim, start=0, end=None):
        end = len(li)-1 if end == None else end
        mid_index = (end - start) // 2 + start  # 3
        if start <= end:
            if li[mid_index] < aim:
                return two_search(li,aim,start=mid_index+1,end=end)
            elif li[mid_index] > aim:
                return two_search(li,aim,start=0,end=mid_index-1)  #([2,3,5],3)
            elif li[mid_index] == aim:
                return mid_index
            else:
                return '没有此值'
        else:
            return '没有此值'
    print(two_search(li,3))#暂时不理解!!!!
    

      

  • 相关阅读:
    什么才是java的基础知识?
    Java的背景、影响及前景
    设计模式分类
    关于日期及日期格式转换的记录
    添加同名工具后台验证后不跳转且保留用户输入的数值
    案件讨论回复中出现把多个附件当成一个评论显示,导致分页出错
    指令发布详情弹窗实现“取消”按钮
    最大间隔分离超平面的唯一性完整证明
    CART算法与剪枝原理
    Spark MLlib学习
  • 原文地址:https://www.cnblogs.com/wpcbk/p/8762586.html
Copyright © 2011-2022 走看看