zoukankan      html  css  js  c++  java
  • 递归函数

    递归函数

    函数的递归调用: 就是在调用一个函数的过程中又直接或间接的调用了自己
    示例1: 直接调用自己

    def foo():
    print('hello')
    foo()

    foo()

    示例2: 间接调用了自己

    def bar():
    print('from bar')
    foo()

    def foo():
    print('hello')
    bar()

    foo()

    为何死递归会抛出异常?

    因为无限的递归会导致内存溢出, 所以python设定了最大的递归层数
    import sys

    print(sys.getrecursionlimit()) # 可以修改层数

    所以: 不应该无限递归调用下去, 应该在满足某种条件下结束递归调用, 然后返回

    递归调用分为两个阶段

    1, 回溯: 一层层的递归调用下去
    2, 递推: 在满足某一条件的情况下结束回溯, 然后开始向上一层一层的返回

    def salary(n):
       if n == 1:
          return 18
       return salary(n - 1) + 10
    
    
    res = salary(5)
    print(res)
    
    nums=[111,[222,[333,[444,[5555,[6666,[777,[888,[9999]]]]]]]]]
    
    def func(l):
       for x in l:
          if type(x) is list:
    
             # 把自身的代码重新调用一次
    
    ​         func(x)
    ​      else:
    ​         print(x)
    func(nums)
    

    从小到大排列的一个数字列表
    nums = [11, 13, 32, 47, 53, 73, 84, 91,101,111,222,333,444,5555]

    def binary_search(l,find_num):
       if len(l)==0:
          print('find_num not exists')
          return
       mid_index = len(l) // 2
       if find_num > l[mid_index]:
          right_l = l[mid_index+1:]
          binary_search(right_l,find_num)
       elif find_num < l[mid_index]:
          left_l = l[:mid_index]
          binary_search(left_l,find_num)
       else:
          print('find it')
    
    binary_search(nums,11)
    

    三元表达式:表达式1 if 条件 else 表达式2

    y = 111
    x = 222
    
    def max2(x,y):
       if x > y:
          return x
       else:
          return y
    
    
    res = x if x > y else y
    print(res)
    

    匿名函数即没用名字的函数

    res = (lambda x,y:x+y)(1,2)
    print(res)
    
    f= lambda x,y:x+y
    print(f)
    f(1,2)
    
    特点:没有名字意味着只能用一次,用完之后就是垃圾,所以匿名函数只用于临时使用一次的场景
    salaries = {
       "egon":4.4,
       "lqz":3.3,
       "yh":2.2
    }
    
    def func(k):
       return salaries[k]
    print(max(salaries,key=lambda k:salaries[k]))
    print(min(salaries,key=lambda k:salaries[k]))
    print(sorted(salaries,key= lambda k:salaries[k],reverse=True))
    
  • 相关阅读:
    Python环境搭建
    appium的android端的环境搭建(Window)
    Unittest中常用的十四种断言方法
    Leetcode-141(判断链表是否存在环)
    Leetcode-88(归并两个有序数组)
    Leetcode-680(回文字符串)
    Leetcode-345(反转字符串中的元音字符)
    Leetcode-633 (两数平方和)
    Leetcode-167(有序数组的 Two Sum)
    判断是否为小数
  • 原文地址:https://www.cnblogs.com/lgh8023/p/13369086.html
Copyright © 2011-2022 走看看