小能豆

斐波那契数列,在 Python 3 中带有一行行吗?

python

我知道用正确的函数结构编写没有什么问题,但我想知道如何用一行最 Pythonic 的方式找到第 n 个斐波那契数。

我写了该代码,但在我看来这不是最好的方法:

>>> fib = lambda n:reduce(lambda x, y: (x[0]+x[1], x[0]), [(1,1)]*(n-2))[0]
>>> fib(8)
13

怎样才能更好、更简单呢?


阅读 71

收藏
2024-05-15

共1个答案

小能豆

虽然你的解决方案很简洁,但它可能不是最可读或最有效的方法来计算第 n 个斐波那契数。以下是一种更 Pythonic 的方法,使用一行代码以递归的 lambda 函数:

fib = lambda n: n if n <= 1 else fib(n-1) + fib(n-2)

这个 lambda 函数通过递归定义了斐波那契数列。如果 n 是 0 或 1,则返回 n,否则它递归调用自身,分别使用 n-1 和 n-2,然后返回这两个递归调用的和。

你可以使用这个 lambda 函数来找到第 n 个斐波那契数,例如:

print(fib(8))  # 输出:21

这个解决方案简洁易懂,但值得注意的是,对于较大的 n,递归解决方案可能效率较低,因为它涉及到重复的计算。为了获得更好的性能,你可能考虑使用迭代方法或记忆化技术。然而,如果简洁性和清晰性是你的主要关注点,这种递归 lambda 方法是非常 Pythonic 的。

2024-05-15