Fibonacci系列使用列表?

时间:2017-05-23 17:12:23

标签: python fibonacci

我正在尝试使用python中的列表来打印斐波纳契系列。 这是我的代码

[1, 1, 2, 3, 2, 3, 5, 5, 5, 8]

输出

[0]
    Category_id:1,
    product:food
[1]
    Category_id=1
    product:fish
[2]
   Category_id=1
   product:vegetable

我没有收到错误!

6 个答案:

答案 0 :(得分:3)

Python range从0开始,你需要从生成元素2开始。从0开始,你得到前几个计算的负索引,从列表的末尾访问。要解决此问题,请将循环更改为for i in range(2, 8)

为了澄清似乎是混淆的原因,通过从零开始range并使用否定索引,您最终将以下术语求和并附加到列表中:

f[2] = f[0-1] + f[0-2] = f[-1] + f[-2] (= f[1] + f[0]) = 1 + 1 = 2  # looking good
f[3] = f[1-1] + f[1-2] = f[0] + f[-1] (= f[0] + f[2]) = 1 + 2 = 3   # looking good
f[4] = f[2-1] + f[2-2] = f[1] + f[0] = 1 + 1 = 2                    # oops!
f[5] = f[3-1] + f[3-2] = f[2] + f[1] = 2 + 1 = 3

从那时起,数字就在轨道上,但是从正确的索引偏移了2。

答案 1 :(得分:1)

f=[1,1]

for i in range(8):
    f.append(f[i]+f[i+1])

print(f)

<强> RESULT

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

答案 2 :(得分:1)

f=[1,1]
for i in range(8):
    s=len(f)
    f.append(f[s-1]+f[s-2]) #sum of last two elements

print(f)

或使用-1和-2作为最后两个元素的索引。

答案 3 :(得分:0)

如果您没有明确指定起点,您应该知道range函数从0开始。在您的情况下,它应该是:for i in range(2, 8)

输出:

[1, 1, 2, 3, 5, 8, 13, 21]

另外,在Python中,你可以在数组中使用负索引从右边而不是左边计数,这就是你有这个奇怪结果的原因。

答案 4 :(得分:0)

添加到pjs的回答:当i = 0时,您要添加f[-1]f[-2],其中索引-1会为您提供列表中的最后一个元素,因此上。

要解决此问题,正如其他答案已经指出的那样,您需要为range()设置正确的起点。

答案 5 :(得分:0)

脚本

f=[1,1]

for i in range(2,8):
  print(i)
  f.append(f[i-1]+f[i-2])
  print(f)

输出

2
[1, 1, 2]
3
[1, 1, 2, 3]
4
[1, 1, 2, 3, 5]
5
[1, 1, 2, 3, 5, 8]
6
[1, 1, 2, 3, 5, 8, 13]
7
[1, 1, 2, 3, 5, 8, 13, 21]

问题是i从0开始,f[-1], f[-2]返回0。 开始使用范围从2和8代表前8个斐波纳契数。

删除调试打印

脚本

f=[1,1]

for i in range(2,8):
   f.append(f[i-1]+f[i-2])
print(f)