使用Python进行循环问题的迭代

3

我被要求找出一个循环序列的第30个值,该序列遵循以下方程:x(n) = 2*x(n-1) - x(n-2),其中n >= 3,并且 x(1) = 0x(2) = 1

按照斐波那契迭代的逻辑,我想出了以下代码:

def loop(n):
    a = 0
    b = 1
    for i in range(30):
        a, b = b, 2 * b - a
    return a

在执行loop(30)后返回值为30,但我知道从数学上来看应该是29。这段代码似乎多进行了一步操作。有谁能帮忙指出我的代码哪里出错了吗?

2
如果你从第一个元素开始,向前移动30个元素,你最终会到达哪个元素? - Scott Hunter
你不应该使用递归来解决这个问题吗?因为这就是问题所要求的。 - Iain Shelvington
0和1是X[0,1]——第一个和第二个序列号...所以...数组是从零开始的。 - user14025936
2个回答

3
你只需要运行循环n - 1次。因为赋值a = 0初始化了x1,每个循环后a被下一个值(来自x2)重新赋值。
def loop(n):
    a = 0
    b = 1
    for i in range(n - 1):
        a, b = b, 2*b - a
    return a
    
print(loop(30))
# 29

1
你可以注意到第一次a的值为1(a=b=1;)。根据条件,当b=2*b-1时,a的值会增加1。因此,在接下来的n个迭代中,输出将是n。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接