python算法之斐波那契数列

斐波那契数列

问题描述:斐波那契数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1;当n比较大的时候,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。

输入格式:输入包含一个整数n

输出格式:输出一行,包含一个整数,表示Fn除以10007的余数。

第一次运行

因为运行超时没有拿到满分

while True:
    try:
        f = [1, 1, 1]
        n = int(input())             # 输入一个整数

        for i in range(n-2):
            f[2] = f[0] + f[1]
            f[0] = f[1]
            f[1] = f[2]

        print(f[2] % 10007)
    except:
        break

第二次运行

优化了程序,虽然没有运行超时,但是又出现了内存超额的问题

while True:
    try:
        f_list = []
        m = int(input())            # 输入一个整数

        for i in range(m):
            if i == 0 or i == 1:
                f_list.append(1)
            else:
                f_list.append(f_list[i - 2] + f_list[i - 1])

        print(f_list[m - 1] % 10007)
    except:
        break

第三次运行

经过查询资料优化,最终得到满分

while True:
    try:
        # 输入整数
        n = int(input())
        a = b = 1
        c = a+b
        # 如果n为2,可以直接输出结果1,否则进入循环
        if n <= 2:
            print(1)
        else:
            for i in range(3, n):
                a = b
                b = c
                c = (a+b)%10007
            print(c)
    except:
        break

你可能感兴趣的:(python,算法)