自学内容网 自学内容网

蓝桥杯练习题 —— 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),保证了结果在计算过程中不会超出可表示的范围。

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


原文地址:https://blog.csdn.net/Rickest_man/article/details/137695247

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!