【问题标题】:f = lambda n:(1,f(n-1)*n)[n>1] gives RunTimeError in Python 3f = lambda n:(1,f(n-1)*n)[n>1] 在 Python 3 中给出 RunTimeError
【发布时间】:2015-07-30 15:05:37
【问题描述】:

我在 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

问题出在哪里?

【问题讨论】:

    标签: python python-3.x lambda


    【解决方案1】:

    元组不会被延迟评估。即使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)
    

    【讨论】:

      猜你喜欢
      • 2015-10-08
      • 2015-08-13
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 2012-02-20
      • 2015-01-19
      • 1970-01-01
      相关资源
      最近更新 更多