什么是斐波那契数列?

想象一下,有一对小兔子,一个月后长大成年,两个月后开始生育,每月生一对小兔子。新出生的小兔子也遵循同样的规律。那么,每个月兔子的总数会是多少呢? 这就是斐波那契数列的经典模型。

斐波那契数列是一个由 0 和 1 开始的数列,后续的每一项都等于前两项之和。用数学公式表示就是:

所以,斐波那契数列的前几项是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...

方法一:递归实现

递归是一种函数调用自身的方法。使用递归实现斐波那契数列非常简洁,代码如下:

def fibonacci_recursive(n):
    """使用递归计算斐波那契数列的第n项"""
    if n <= 1:
        return n
    else:
        return fibonacci_recursive(n-1) + fibonacci_recursive(n-2)

# 示例:计算斐波那契数列的第10项
result = fibonacci_recursive(10)
print(f"斐波那契数列的第10项是: {result}")

代码解释:

递归的优缺点:

方法二:迭代实现

迭代是使用循环来逐步计算结果的方法。使用迭代实现斐波那契数列效率更高,代码如下:

def fibonacci_iterative(n):
    """使用迭代计算斐波那契数列的第n项"""
    if n <= 1:
        return n
    a, b = 0, 1  # 初始化两个变量 a 和 b,分别存储前两项的值
    for _ in range(2, n + 1):
        a, b = b, a + b  # 更新 a 和 b 的值
    return b

# 示例:计算斐波那契数列的第10项
result = fibonacci_iterative(10)
print(f"斐波那契数列的第10项是: {result}")

代码解释:

迭代的优缺点:

扩展:使用生成器优化斐波那契数列

生成器是一种特殊的迭代器,可以按需生成值,而不是一次性生成所有值。使用生成器可以更有效地利用内存,尤其是在需要计算斐波那契数列的前N项时。

def fibonacci_generator(n):
    """使用生成器生成斐波那契数列的前n项"""
    a, b = 0, 1
    for _ in range(n):
        yield a  # 使用 yield 关键字返回当前值
        a, b = b, a + b

# 示例:生成斐波那契数列的前10项
for num in fibonacci_generator(10):
    print(num, end=" ")
print()

代码解释:

练习题

  1. 编写一个函数,计算斐波那契数列的前N项,并将结果存储在一个列表中。
  2. 编写一个函数,判断一个数是否属于斐波那契数列。

希望这篇文章能帮助你理解斐波那契数列以及如何使用Python实现它。祝你编程愉快!