📜  在 python 中使用函数的斐波那契(1)

📅  最后修改于: 2023-12-03 14:51:05.401000             🧑  作者: Mango

在 Python 中使用函数的斐波那契

斐波那契(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]

这个函数生成了与前面那个函数相同的序列。虽然使用递归的方式可以更加简洁,但是当需要生成的斐波那契数列长度较大时,递归的方式可能会导致栈溢出,因此在实际使用时需要谨慎。