【问题标题】:Can't understand recursion in function无法理解函数中的递归
【发布时间】:2021-09-03 23:19:16
【问题描述】:

我无法理解它是如何工作的。为什么输出有第一行,其中 var X == 1 ? 而且,如果 new_var 没有在任何地方定义为整数,编译器如何不给出错误?
是因为调用堆栈是这样工作的吗?它从最后一次调用返回,所以返回 1 后,new_val 变为 == 1 ?!

输出:
我在这!!!! X 是:1
我在这!!!! X 为:2,new_var 为 1
我在这!!!! X 为:3,new_var 为 2
我在这!!!! X 为:4,new_var 为 6
24

def fact_rec(x):
    if x > 0:         
        if x == 1:
            print(f"I'm here!!!!  X is: {x}")
            return 1
        else:            
            new_var = fact_rec(x-1)
            print(f"I'm here!!!!  X is: {x}, and new_var is {new_var}")
            return new_var*x
    else:
        return "It's negative"
print(fact_rec(4))

【问题讨论】:

  • 只是一个旁注,如果用户输入零怎么办?
  • 零不是负数

标签: python-3.x recursion


【解决方案1】:

for, fact_rec(4) 函数会检查 4 是否大于零,就在这里。然后它会检查它是否等于1,它不在这里。所以,它会调用 fact_rec(3) 并且会重复同样的事情。
当 x == 1 时,print(f"I'm here!!!! X is: {x}") 将被触发,函数将返回 1 给调用函数,即 fact_rec(2) 等等。 因此,首先将打印 x = 1 的条件,然后打印 x = 2,依此类推。

请参考下图:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-16
    • 2020-06-08
    • 2021-12-14
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多