📅  最后修改于: 2023-12-03 14:51:05.401000             🧑  作者: Mango
斐波那契(Fibonacci)数列指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
在数学上,斐波那契数列以如下被以递归的方法定义:
$$\begin{cases}F(0) = 0\ F(1) = 1\ F(n) = F(n-1) + F(n-2), n\geq 2\end{cases}$$
可以使用 Python 编写函数来生成斐波那契序列。
def fibonacci(n):
"""
生成斐波那契序列的函数
:param n: 生成序列的长度
:type n: int
:return: 包含斐波那契序列的列表
:rtype: list[int]
"""
fib = [0, 1]
for i in range(n - 2):
fib.append(fib[-1] + fib[-2])
return fib
这个函数接受一个整数作为参数,生成一个包含斐波那契序列的列表。默认情况下,这个序列的长度是 2,以 0 和 1 作为前两个元素。可以根据需要调整序列的长度。
下面是一个例子:
>>> fibonacci(10)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
在这个例子中,函数生成了一个包含 10 个斐波那契数的序列。
除了使用循环以外,在 Python 中还可以使用递归来生成斐波那契序列。下面是使用递归的函数实现:
def fibonacci_recursive(n):
"""
使用递归生成斐波那契序列的函数
:param n: 生成序列的长度
:type n: int
:return: 包含斐波那契序列的列表
:rtype: list[int]
"""
if n == 0:
return []
elif n == 1:
return [0]
elif n == 2:
return [0, 1]
else:
fib = fibonacci_recursive(n - 1)
fib.append(fib[-1] + fib[-2])
return fib
这个函数使用了递归来生成斐波那契序列。当生成序列的长度为 0 时,返回一个空列表;当生成序列的长度为 1 时,返回一个只包含 0 的列表;当生成序列的长度为 2 时,返回一个包含 0 和 1 的列表;否则,递归调用自身,生成序列的前 n-1 个元素,然后计算出序列的第 n 个元素,将其添加到列表中,并返回整个列表。
测试一下这个函数:
>>> fibonacci_recursive(10)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
这个函数生成了与前面那个函数相同的序列。虽然使用递归的方式可以更加简洁,但是当需要生成的斐波那契数列长度较大时,递归的方式可能会导致栈溢出,因此在实际使用时需要谨慎。