我的任务是创建一个函数,从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)产生[]。 任何帮助或提示将不胜感激: - )
答案 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]