zoukankan      html  css  js  c++  java
  • python学习笔记 | 递归思想

    1、引子

       大师 L. Peter Deutsch 说过:

    To Iterate is Human, to Recurse, Divine.

           中文译为:人理解迭代,神理解递归

    2、什么是递归

    def fun():
        print("dd")
        fun()
    fun()

    3、缺点

    • 占内存

    RecursionError: maximum recursion depth exceeded while decoding a JSON array from a unicode string

    递归错误:超过递归的最大深度(不大于1000)

    错误原因:python从内存角度出发做的限制

    修改自身最大深度:

    import sys
    sys.setrecursionlimit(10000)#设置最大深度10000

    ps:如果递归次数太多,就不适合使用递归来解决问题(太占内存)

    4、优点

    • 代码更简练
    • b格更高

    5、应用

    • 二分查找算法
      def find(list,aim):
          mid_index = len(list) // 2
          print(list[mid_index])
          if list[mid_index] < aim:
              find(list[mid_index +1:] ,aim)
          elif list[mid_index] > aim:
              find(list[:mid_index] ,aim)
          else:
              print('找到了',mid_index,list[mid_index])
      list=[1,2,3,4,5,6,7,8,9,10]
      find(list,7)

      优化:

      def find2(list,aim,start=0,end=None):#优化二分查找
          end = len(list) if end == None else end
          mid_index=(end-start) // 2 + start
          print(mid_index)
          if list[mid_index] < aim:
              find2(list,aim,start=mid_index+1,end=end)
          elif list[mid_index] > aim:
              find2(list,aim,start=start,end=mid_index-1)
          else:
              print('找到了', mid_index, list[mid_index])
      list=[1,2,3,4,5,6,7,8,9,10]
      erfind2(list,7)
  • 相关阅读:
    Kubernetes DNS服务配置案例
    Dockerfile常用指令
    Docker常用命令
    Kubernetes常用命令
    阿里云ECS安装Kubernetes问题收集与解答
    712. Minimum ASCII Delete Sum for Two Strings
    845. Longest Mountain in Array
    815. Bus Routes
    204. Count Primes
    190. Reverse Bits
  • 原文地址:https://www.cnblogs.com/billie52707/p/12810725.html
Copyright © 2011-2022 走看看