在给定序列长度和模数的情况下计算皮萨诺周期

问题描述 投票:0回答:1
#This one doesn't work 
def pisano(n,m):
    lis=[]
    for i in range(n+1):
        if i<=1:
            lis.append(i)
        else:
            lis.append((lis[i-2]+lis[i-1])%m)
            if lis[-2:] == [0,1]:
                pisanoo = len(lis)-2
                rem = n%pisanoo
                print(rem)
                calc_fib(rem,m)
                break

#This one works 
def pisano(n,m):
    lis=[0,1]
    while True:
        lis.append((lis[-2]+lis[-1])%m)
        if lis[-2:] == [0,1]:
            pisanoo = len(lis)-2
            rem = n%pisanoo
            print(rem)
            calc_fib(rem,m)
            break

在上面的代码段中,“ n”是长度,“ m”是模数。我使用“ i”作为迭代的第一个函数失败,但是第二个函数,当我删除“ i”时,它成功地计算了pisano周期。谁能告诉我第一个问题出在哪里,他们的逻辑似乎是一样的。谢谢!

python fibonacci
1个回答
0
投票

在第一个函数中,您正在搜索n元素,因此,如果pisano出现在以后的索引中,则您的函数会错过它。在第二个函数中,您有一个无限循环,因此您一直在搜索直到找到pisano。

例如pisano(5,3)发生在len(lis) = 10时。

© www.soinside.com 2019 - 2024. All rights reserved.