• 递归


    • 定义

      简单地说一个函数不断的调用自己就是递归

    1. 必须有一个明确的结束条件也叫递归出口
    2. 每次进入更深一层的递归时,问题规模相比上一次递归都应有所减少
    3. 递归效率不高,递归的层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,当本次函数调用完会将结果保存在栈中,称为压栈,然后在执行下一次,栈的特点是先进后出,由于栈的大小不是无限的,所以,递归调用的次数过多会导致栈溢出
    
    
    def info(x):
        if x == 0:
            return 0
    
        s = info(x - 1) + x
        print(x)  # 递归在入栈是3 2 1入栈出栈的时候就应该是1 2 3
        return s
    
    
    print(info(3))
    
    
    '''
    小猴子第一天摘下若干桃子,当即吃掉一半,又多吃一个.第二天早上又将剩下的桃子吃一半,
    又多吃一个.以后每天早上吃前一天剩下的一半另一个.到第10天早上猴子想再吃时发现,
    只剩下一个桃子了.问第一天猴子共摘多少个桃子?
    '''
    i = 1
    b = 1
    while i < 10:
        c = (b + 1) * 2
        b = c
        i += 1
    print(c)
    
    
    # 在这里
    # 递归求解
    def info(n):
        if n == 10:
            return 1
        s = (info(n + 1) + 1) * 2
        return s
    n1 = info(1)
    sums = (n1 + 1) * 2
    print("总共有桃%d" % sums)
    
    for i in range(1, 11):
        print("第%d天吃了%d" % (i, info(i)))
    def duck(n):
        if n == 7:
    
            return 2
    
        else:
    
            tmp = (duck(n + 1) + 1) * 2
    
            return tmp
    
    
    n1 = duck(1)
    init = (n1 + 1) * 2
    print("总共有%d只鸡" %init)
    for i in range(1,8):
        print("第 %d 天 卖了%d只" % (i, duck(i)))


    #
    问路如果这个人不知道会去问下一个,如果问到了会依次将结果返回上一级 li = ['a', 'b', 'c', 'd'] def wenlu(a): print("*"*60) if len(a) == 0: return "根本没人知道" person = a.pop(0) if person == 'd': return "这里" print("我也不知道,我问一下%s" %a) res = wenlu(a) print('%s问的结果是%s' %(person,res)) return res wenlu(li) #结果 ************************************************************ 我也不知道,我问一下['b', 'c', 'd'] ************************************************************ 我也不知道,我问一下['c', 'd'] ************************************************************ 我也不知道,我问一下['d'] ************************************************************ c问的结果是这里 b问的结果是这里 a问的结果是这里
    #简单递归求阶乘
    def a(k):
        if k == 0:
            sums = 1
        else:
            sums = k * a(k-1)
        return sums
    print(a(9))
    #递归小练习倒序输出
    import time 
    
    def output(a, b):
    
        if b-1 < 0:
            return
        time.sleep(2)
        print(s[b - 1])
        output(s, b-1)
    s = input("输入一串字符")
    l = len(s)
    output(s, l)
    
    #用切片来实现
    
    s = input("请输入:")
    print("原来的:", s)
    a = s[::-1]
    print("反转", a)
    # 有雌雄一对兔子,假定过两个月便可繁殖雌雄各一的一对小兔子。问过n个月后共有多少对兔子?
    def rabbit(n):
        if n == 1:
            return 1
        if n == 2:
            return 1
        return rabbit(n-2) * 2
    
    
    print(rabbit(9))
  • 相关阅读:
    【IoT平台北向API调用】使用Postman调用Https接口
    【LiteOS】LiteOS移植常见问题
    搞IT产品,请谨记Mobile First
    Modelarts与无感识别技术生态总结(浅出版)
    高性能Web动画和渲染原理系列(1)——CSS动画和JS动画
    使用蓝图构建Flask项目目录
    一统江湖的大前端(8)- velocity.js 运动的姿势(上)
    只需两步手把手教你玩转图像识别
    秉承初心,砥砺奋进!华为云助力锦江都城开启云服务时代
    HBase 索引创建
  • 原文地址:https://www.cnblogs.com/ShanCe/p/9326151.html
Copyright © 2020-2023  润新知