RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 912700
Accepted
Tony Stark
Tony Stark
Asked:2020-11-28 20:05:24 +0000 UTC2020-11-28 20:05:24 +0000 UTC 2020-11-28 20:05:24 +0000 UTC

python中的递归

  • 772

您能解释一下为什么 countDown(5) 函数会输出 0 到 5 的结果吗?也就是怎么到值0是可以理解的,但是值1、2、3、4、5是从哪里来的???

def countDown(start):
    if start <= 0:
        print(start)
    else:
        countDown(start - 1)
        print(start)

由于什么是开始新值的分配?

python
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. gil9red
    2020-11-28T20:18:02Z2020-11-28T20:18:02Z

    看:

    • 当你运行一个递归函数时,只要调用它,它就会“落入”自身([1])。

    • 您有一个[2]限制函数调用的条件 ( )。

    • [1]最重要的是 - 您的函数在显示值之前会落入自身 ( ) 中start。

    这意味着:

    • 函数陷入自身,直到值start变为0并打印值start
    • 函数的退出开始,从最近的函数(具有0)开始,然后是输出start

    编码:

    def countDown(start):
        if start <= 0:            # [2]
            print(start)
        else:
            countDown(start - 1)  # [1]
            print(start)
    

    我认为如果我添加一点日志记录会更清楚:

    def countDown(start, indent=0):
        print('    ' * indent, 'start:', start)
    
        if start <= 0:
            print('    ' * indent, 'print:', start)
        else:
            countDown(start - 1, indent + 1)
            print('    ' * indent, 'print:', start)
    
    countDown(3)
    

    安慰:

     start: 3
         start: 2
             start: 1
                 start: 0
                 print: 0
             print: 1
         print: 2
     print: 3
    
    • 2
  2. Best Answer
    Tony Stark
    2020-11-28T20:18:26Z2020-11-28T20:18:26Z

    这是在一个社区中给我的或多或少的好答案。我正在重新发布以防其他人正在寻找同一问题的答案:

    递归就像一个嵌套娃娃。当它第一次启动时,start=5,它到达了函数内部的启动点,这个时刻有点被记住了。当里面的函数第一次执行时,主函数会继续执行并打印。为什么打印输出五个?因为每次启动一个新函数(就像嵌套娃娃中的嵌套娃娃),都会创建一个新的作用域。而python,当一个变量被访问时,首先会在本地范围内查找——在运行函数的框架内。在这个框架内,started 函数 start 将等于 5。因为所有其他功能(这个“主要”功能内的所有其他俄罗斯套娃)已经停止执行。

    第一次运行该函数时,start=5,没有任何输出。第二次运行该函数。同样,什么也没有显示,因为。在打印之前,启动该功能的另一个副本。但与此同时,start 已经等于 4,以此类推,直到 0。在 if else 部分,第一个条件被触发,函数的下一次执行不会发生。并且有一个简单的零打印。之后,函数(即最小的嵌套娃娃)结束其动作。一旦该函数完成其操作(输出零),它将接管之前的函数,唯一剩下要做的就是打印开始。在这个函数 start=1 的本地范围内,它显示这个并停止执行。一旦它停止执行,前一个函数就会接管,它会显示一个二等分,依此类推,直到俄罗斯套娃一直到最大的嵌套娃娃,

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5