谁能解释一下这段代码怎么不报错?

Who can explain how this code is not an error?

我正在做一些练习来训练自己,练习要求我做一个计算分形的程序,非常简单,我已经在大约 1-2 分钟内完成并且有效,但看看他的解决方案 return x 乘以函数本身?这个运行怎么办?我知道这可能是一个愚蠢的问题,但我认为它可能有用。

def fract(x):
    if x == 0:
        return 1
    return x * fract(x - 1)

print(fract(int(input())))

这是对发生了什么的演练。

首先,你调用 fract(int(input()))。输入法获取用户的响应并将其解析为 int。然后对该 int 调用 fract。

假设我们输入 3。因此我们的 print 语句的计算结果为 fract(3)。

fract(3) returns 3 * fract(2) fract(2) 被调用并且 returns 2 * fract(1) fract(1) 被调用并且 returns 1

所以把它放在一起并用函数调用代替它们 return 我们得到 fract(3) returns 3 * (2 * (1)).