斐波那契 - 我被卡住了

时间:2017-01-05 16:53:58

标签: python

所以我是编程新手(正如你从我愚蠢的问题中看到的那样)。 我真的很困惑:

def Fibonnaci():
    num = int(raw_input("How many numbers? "))
    i = 1
    if num ==0:
        fib = []
    elif num ==1:
        fib = [1]
    elif num ==2:
        fib = [1,1]
    elif num >2:
        fib = [1,1]
    while i < (num - 1):
        fib.append(fib[i] + fib[i -1])
        i += 1
    return fib
print Fibonnaci()

我没有得到的是fib.append(fib[i] + fib[i-1])

因此,我想在输入中选择的数字为5。因此,fib列表中会有[1,1]。然后i将为1。现在我感到困惑。如果i中的fib[i]1,则i-101+01,打印输出应为[1,1,1,3,5]。这实际上是在我删除fib时发生的。并将其仅保留为fib.append(i+(i-1))

所以我认为fib正在做一些重要的事情,但我无法弄清楚是什么。因为此时i = 1。那么列表如何获得2呢?输出为1,1,2,3,5。 即使fib[i]意味着i现在是2,因为列表中有[1,1],那么它会2+1 = 3 fib [1,1,3]现在是<a ng-href="sms?:body={{account.referral_code_string}}" class="sms-btn">Send Invite by SMS</a>

我希望我没有完全困惑你(因为我自己很困惑)。

2 个答案:

答案 0 :(得分:3)

如果有人写fib[i],则表示表达式扩展为索引fib 列表i中的值。所以说我们构建了fib,它是:

fib = [1,1]

第一次迭代

现在i = 1我们执行以下行:

fib.append(fib[i]+fib[i-1])

现在这是什么意思,首先通过将i替换为1来扩展表达式,我们这样读:

fib.append(fib[1]+fib[1-1])

fib.append(fib[1]+fib[0])

现在,0fib)的第二个(列表起始于索引fib[1])值为1,因此第一个元素(fib[0])所以我们将其扩展为:

fib.append(1+1)

或:

fib.append(2)

现在Python将执行此操作,fib现在是:

fib = [1,1,2]

第二次迭代

更改fib后,i会更新(现在为i = 2),因此我们会进行下一次迭代。在这次迭代中,我们再次执行:

fib.append(fib[i]+fib[i-1])

i=2以来,我们可以将其替换为:

fib.append(fib[2]+fib[1])

现在,列表中的第三个(fib[2])和第二个(fib[1])元素分别为12(您可以从结尾处查看此内容)上一节),因此Python将运行:

fib.append(2+1)

因此相当于:

fib.append(3)

因此,在此迭代之后,fib等于:

fib = [1,1,2,3]

重复此过程,直到i到达界限。因此,每次Python都会读取到目前为止构造的fib列表的最后两个元素,将它们添加到一起并在列表的末尾添加它(fib)。最后,如果达到了绑定,则返回结果。

答案 1 :(得分:2)

i这里只是一个柜台。最后一部分可以这样改变:

# we need to repeat n-2 times (i.e. once for a list of 3)
for i in range(num-2):
    # fib is the array of numbers we already have
    # we append sum of the last two elements n-2 times
    fib.append(fib[-1] + fib[-2])  
return fib

在原始示例中,由于ifib的长度相同,因此将其用作索引。因此,fib[i]是最后一个元素,fib[i-1]是最后一个元素