5] 并想用递归尝试它,但对于一些它不起作用的原因。暂时忘记它是非 pythonic 的。 这是我正在尝试替-6ren">
gpt4 book ai didi

python - 为什么我得到 "maximum recursion depth exceeded"

转载 作者:太空狗 更新时间:2023-10-30 02:18:17 27 4
gpt4 key购买 nike

我刚刚看到 python 的 if-else 语句的另一种构造,如 (0, 1)[ x > 5] 并想用递归尝试它,但对于一些它不起作用的原因。暂时忘记它是非 pythonic 的。

这是我正在尝试替换的原始代码:

def f(n):
return 1 if n == 1 else n * f(n - 1)

替代方案,给出递归问题:

def f(n):
return (n * f(n - 1), 1)[n == 1]

替代代码有什么问题?

最佳答案

问题是 Python 总是会在使用 [n == 1] 索引元组之前尝试计算 n * f(n - 1)

结果是该函数不断调用自身,直到进程耗尽堆栈上的内存。

第一个代码通过在递归调用之前执行 n==1 检查来避免这种情况,如果检查成功则不进行调用

来源:

https://docs.python.org/2/reference/expressions.html有一个关于“评估顺序”的部分,说明它是从左到右执行的。

关于python - 为什么我得到 "maximum recursion depth exceeded",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36355625/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com