首页 论坛 置顶 用Python编写斐波那契数列

正在查看 1 个帖子:1-1 (共 1 个帖子)
  • 作者
    帖子
  • #25224

    斐波那契数列是一系列数字,其中每个数字是前两个数字的和:

    0, 1, 1, 2, 3, 5, 8, 13, ...

    这是数学和编程中最著名的数列之一——而且它经常出现!

    促使我写这篇简短博客的原因是一个有趣的例子,即在LeetCode的Climbing Stairs问题中使用斐波那契算法。

    🪜 爬楼梯的故事

    想象一下有一个有n级台阶的楼梯。

    • 你可以一次爬1步。
    • 或者一次跳2步(如果可能的话)。

    你可以用多少种不同的方式到达顶部?

    步骤模式
    对于前几步:

    步骤1 → 1种方式

    步骤2 → 2种方式

    1 + 1
    2

     

    步骤3 → 3种方式

    1 + 1 + 1
    1 + 2
    2 + 1

     

    步骤 4 → 5 种方法

    1 + 1 + 1 + 1
    1 + 1 + 2
    1 + 2 + 1
    2 + 1 + 1
    2 + 2

     

    你看到一个模式形成了吗?
    1, 2, 3, 5...

    这是斐波那契数列向右移动了一位!

    为什么斐波那契在这里出现

    要到达第 n 步,你的最后一步可以是:

    从 n-1 走 1 步(例如 9 -> 10)

    从 n-2 走 2 步(例如 8 -> 10)

    因此,到达第 n 步的方式数量为:

      𝑤𝑎𝑦𝑠(𝑛) = 𝑤𝑎𝑦𝑠(𝑛−1) + 𝑤𝑎𝑦𝑠(𝑛−2)

     

    示例:
    第 10 步 = 到达第 9 步的方式 + 到达第 8 步的方式

    我们知道这是因为你可以在到达第 9 步的所有方式上加一个 1,这样就能到达第 10 步,

    或者你可以将每种到达第8步的方法加上 2,这样就能到达第10步。

    因此,通过将第8步的方法与第9步的方法相加,你可以得到到达第10步的所有组合。

    这正是斐波那契规则!

    在Python中编码斐波那契数列

    一旦我们看到了这个模式,我们就可以直接编码斐波那契数列。

    以下是一个生成前 n 个斐波那契数的简单函数:

    def fibonacci(n: int) -> list[int]:
        if n <= 0:
            return []
    
        # 从前两个斐波那契数开始
        result = [0, 1]
    
        # 构建到n的数列
    
    for i in range(2, n):
        result.append(result[i - 1] + result[i - 2])
    
    return result[:n]
    
    # 示例:前13个斐波那契数
    print(fibonacci(13))

    输出:
    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]

    关键要点

    斐波那契数列在关于计数选择序列、增量组合等问题中无处不在。

    规则很简单:
    F(n) = F(n-1) + F(n-2)

    像爬楼梯这样的问题是自然发现斐波那契数列的有趣方式,如果你正在学习Python,建议可以查看一些在线编码挑战。

正在查看 1 个帖子:1-1 (共 1 个帖子)
  • 哎呀,回复话题必需登录。