【发布时间】:2012-05-18 08:51:36
【问题描述】:
对于一个任务,我们被要求定义一个斐波那契函数,我用这个来完成:
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
但是,我看到递归函数,例如阶乘函数,在单行返回语句中定义,如下所示:
def factorial(n):
return n > 1 and n * factorial(n-1) or 1
因此,我尝试将其应用于我的斐波那契函数。经过几次尝试,我让它适用于所有测试用例,但 s = 0 时除外,在这种情况下,它应该返回 0 时返回 False。这就是我所在的位置:
def fibonacci(n):
return ((n == 0 or n == 1) and n) or (n > 1 and (fibonacci(n-1) + fibonacci(n-2)))
我知道 python 将 0 评估为 False,那么当 n 为 0 时,我如何让 python 返回零而不是 False,同时保持代码的当前长度/结构?这可能吗?
此外,这种创建函数(递归或其他方式)的风格是否比教科书版本更可取/更不理想? (我想不仅仅是因为可读性)
明确地说,我已经满足了作业的要求,并且仅出于个人知识,我希望更清楚地了解 return 语句中发生的事情。
【问题讨论】:
-
您需要编写一个递归斐波那契函数,还是仅仅a斐波那契函数?因为递归实现的运行时间非常糟糕(指数),而非递归实现通常是线性的。 pythonic 的东西可能是产生斐波那契数列的生成器......
-
@mata:这个作业旨在说明递归的概念。
标签: python syntax return return-value