所以我是编程新手(正如你从我愚蠢的问题中看到的那样)。 我真的很困惑:
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-1
为0
。 1+0
为1
,打印输出应为[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>
。
我希望我没有完全困惑你(因为我自己很困惑)。
答案 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])
现在,0
(fib
)的第二个(列表起始于索引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]
)元素分别为1
和2
(您可以从结尾处查看此内容)上一节),因此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
在原始示例中,由于i
与fib
的长度相同,因此将其用作索引。因此,fib[i]
是最后一个元素,fib[i-1]
是最后一个元素