Via*_*iuk 4 python recursion if-statement
我只是看到python的if-else语句的替代构造,(0, 1)[ x > 5]并希望尝试递归,但由于某种原因,它不起作用.只是忘了它是unpythonic的片刻.
这是一个原始代码,我试图替换为替代:
def f(n):
return 1 if n == 1 else n * f(n - 1)
Run Code Online (Sandbox Code Playgroud)
替代方案,它会产生递归问题:
def f(n):
return (n * f(n - 1), 1)[n == 1]
Run Code Online (Sandbox Code Playgroud)
替代代码有什么问题?
问题是Python总是会n * f(n - 1)在使用元组索引之前尝试计算[n == 1].
结果是该函数不断调用自身,直到进程在堆栈上耗尽内存.
第一个代码通过n==1在递归调用之前执行检查来避免这种情况,然后在检查成功时不进行调用
资源:
https://docs.python.org/2/reference/expressions.html上有一个关于"评估顺序"的部分,说明它是从左到右执行的.