蓝桥杯练习题 —— Fibonacci数列(python)

def fibonacci_modulo(n):
    if n <= 2:
        return 1

    a, b = 1, 1
    for _ in range(3, n + 1):
        a, b = b, (a + b) % 10007

    return b


if __name__ == '__main__':
    # 示例:计算 Fn 除以 10007 的余数
    n = int(input())
    result = fibonacci_modulo(n)
    print(result)

代码解释:
 

a, b = b, (a + b) % 10007

这段代码是一个用于计算斐波那契数列的函数,但与普通的斐波那契数列不同的是,它计算的是每个斐波那契数除以 10007 的余数。让我解释其中的一行代码:

a, b = b, (a + b) % 10007

这行代码利用了 Python 中的元组解包(tuple unpacking)的特性,以及同时进行多重赋值的能力。

  1. 首先,右侧的表达式 (a + b) % 10007 计算出当前斐波那契数 a + b 除以 10007 的余数。
  2. 然后,这个结果被赋值给变量 b,成为下一个斐波那契数。
  3. 同时,旧的 b 被赋值给变量 a,成为下一个循环中的前一个斐波那契数。

这样做的效果是,每一步迭代都更新了 ab 的值,使得 ab 分别成为下一个斐波那契数列中的前一个和当前的数,从而计算了下一个斐波那契数。同时,由于每次都对结果取模(% 10007),保证了结果在计算过程中不会超出可表示的范围。

这种技巧称为“递推法”或“动态规划”,它避免了在计算斐波那契数列时使用递归或者保存所有中间结果的方式,从而提高了计算效率。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值