我在Python 3中打了一个阶乘函数,但我的lambda不起作用:
f = lambda n:(1,f(n-1)*n)[n>1]
它引发了这个错误:
File "<stdin>", line 1, in <lambda>
File "<stdin>", line 1, in <lambda>
File "<stdin>", line 1, in <lambda>
# Many other identical lines...
RuntimeError: maximum recursion depth exceeded
问题出在哪里?
答案 0 :(得分:3)
元组不会被懒惰地评估。即使f(0)
将选择元组(1, f(-1)*0)
中的第一个元素,它仍然必须先调用f(-1)才能执行此操作。在f(-1)可以返回之前,它必须调用f(-2),依此类推。
请考虑使用内联条件,执行延迟评估,直到它知道它将要关闭哪个分支。
f = lambda n:1 if n <= 1 else f(n-1)*n
print f(10)