如何修复python fibonacci序列脚本?

时间:2015-02-17 21:37:31

标签: python-3.x

我的任务是创建一个函数,从fibonacci序列开始生成3个数字列表,从0开始。这是我的代码。

def fibList(n):
    a = 0; b = 1; fibList = []
    if n <= 0:
        return
    elif n == 1:
        fibList = [a]
    elif n == 2:
        fibList = [a,b]
    else:
        for i in range(0,n):
            a, b = b, a + b
            fibList.append(b)

return fibList


def main():
    print (fibList(4))
    print (fibList(10))
    print (fibList(-4))

我希望我的输出看起来像是[0,1,1,2]为4,[0,1,1,2,3,5,8,13,21,34,55]为10,和[]为-4

我的问题始于fibList(4),当前输出为[1,2,3,5],而fibList(10)给出的输出为[1,2,3,5,8,13,21,34] ,55,89]和-4我得到“无”而不是[]。 如果我输入fibList(1)我得到[0]而对于fibList(2)我得到[0,1],但是当我测试fibList(3)时,第一个0和1丢失,给我[1,2, 3] 如何制作它以使任何高于3的数字以[0,1,1,2 ...]开头?我的主要问题是让0和1成为序列中的前两个数字,并使fibList(-4)产生[]。 任何帮助或提示将不胜感激: - )

2 个答案:

答案 0 :(得分:0)

你所缺少的就是在小于或等于零的情况下添加一个空列表,并在大于2的斐波那契数字范围内正确递归。进行如下小改动:

def fibList(n):

        if n <= 0:
                fibnums = []
        elif n == 1:
                fibnums = [0]
        elif n >= 2:
                fibnums = [0, 1]
                for i in range(2,n):
                        fibnums.append(fibnums[i-1]+fibnums[i-2])
        return fibnums 

请注意,对于大数字,这种递归方法可能会非常慢,如果您的程序关注这一点。祝你好运!

通过这些更改,

print (fibList(4)) => [0, 1, 1, 2]
print (fibList(10)) => [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
print (fibList(-4)) => []

答案 1 :(得分:0)

你没有完全定义你的功能。结果列表是否有n个值[f(0),...,f(n-1)]或n + 1个值[f(0),...,f(n)]?你的例子是矛盾的:4的'预期'输出有4个以f(3)结尾的值,而10的值有11个以f(10)结尾的值。

我将假设后者是正确的。这是您的快速迭代解决方案的修订版。 (如果我的假设是错误的,请将范围停在n而不是n + 1.)

def fibs(n):
   "Return [fib(0), ..., fib(n)."
   ret = [0, 1]  # fib(0), fib(1)
   a, b = ret
   if n <= 1:
      return ret[:n+1]
   else:
      for i in range(2, n+1):
         a, b = b, a+b  # b = f(i)
         ret.append(b)
      return ret

print(fibs(-4), fibs(0), fibs(2), fibs(4), fibs(10))

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