zoukankan      html  css  js  c++  java
  • 递归

    递归调用:在函数调用过程中,直接或间接的调用了函数本身,这就是函数的递归调用 
    1、必须有一个明确的结束条件,当满足条件时结束递推,进行回溯
    2、每次进入更深一层递归时,问题规模相比上次递归都应该有所减少
    3、递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用时通过栈stack这种数据结构实现的,
      每当进入一个函数调用,栈就会增加一层栈帧,每当函数返回,栈就会减少一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

    4、简单运用:
    def f1():
        print('from f1')
        f1()
    
    f1()   #超出设置的递归次数:RecursionError: maximum recursion depth exceeded while calling a Python object
    
    
    

    5、查看及设置递归次数

    import sys
    print(sys.getrecursionlimit())   #1000  查询出设置的最多可以递归多少层
    sys.setrecursionlimit(10000)    #
    print(sys.getrecursionlimit())   #10000
    

    6、递推年龄

    #有几个人,最小的18岁,每个人都比上一个人大2岁,用递归的方法得到第n个人的年龄
    def age(n):
        if n == 1:
            return 18
        return age(n-1)+2
    
    print(age(5))    #26
    

    7、二分法运用:

    l = [1,3,5,7,9,14,16,17,22,55,66,77,88,99,101,200]
    def search(find_num,seq):
        if len(seq) == 0:#判断是否为空列表,如果不判断,后面切到最后就是一个空列表,IndexError: list index out of range
            print('not find')
            return
        mid_index = len(seq)//2  #地板除,得到整数,1//2=0 ,3//2=1 ,2//2 =1
        mid_num = seq[mid_index]
        if find_num > mid_num:
            seq = seq[mid_index+1:]
            search(find_num,seq)
        elif find_num < mid_num:
            seq = seq[:mid_index]
            search(find_num,seq)
        else:
            print('find it')
    
    search(87,l)
    

      

    
    
  • 相关阅读:
    19.模块化
    20.ES7新特性
    22.ES9
    21.ES8新特性
    RabbitMQ:排他性队列(Exclusive Queue)
    为什么要使用消息队列
    收集RabbitMQ的用户
    身份管理提供商:Gigya和PingIdentity
    HTTP协议原理(详细)
    转:Linux下高并发socket最大连接数所受的各种限制
  • 原文地址:https://www.cnblogs.com/wangkc/p/6935520.html
Copyright © 2011-2022 走看看