给定正整数n
,创建一个由小于或等于n的斐波那契数列部分组成的列表。例如,如果为n is 6
,则该列表为[0, 1, 1, 2, 3, 5]
,如果为n is 1
,则该列表为[0, 1, 1]
。
目前,如果n
等于数字6或20,则斐波那契数列将遍历n
,例如,[0, 1, 1, 2, 3, 5, 8]
表示n = 6
,[0, 1, 1, 2, 3, 5, 8, 13, 21]
表示n = 20
这是我目前所拥有的
fib = [0,1]
result = 0
while result < n:
result = fib[-1] + fib[-2]
fib.append(result)
发布于 2016-11-21 04:16:04
编辑:如果你的意思是希望列表中的最后一项小于n
,那么下面的答案是有效的,否则saurabh的答案是正确的。
如果你在while循环中当前迭代,并且你的结果超过了limit n
,会发生什么呢?你还是要把它加进去...
这是一个穷人的方法:
fib = [0,1]
result = 0
n = 6
while result < n:
result = fib[-1] + fib[-2]
if (result < n):
fib.append(result)
print(fib)
对于6: 20的[0, 1, 1, 2, 3, 5]
:[0, 1, 1, 2, 3, 5, 8, 13]
发布于 2016-11-21 04:21:13
fib = [0,1]
result = fib[-1] + fib[-2]
while result < n:
fib.append(result)
result = fib[-1] + fib[-2]
这应该是可行的。
发布于 2016-11-21 04:48:47
Bug在追加之前没有使用<=
和计算新的结果。它可以处理所有的测试用例,也可以处理加0和负数:
def fib(n):
if n < 0: # if you care about negative numbers.
return []
fib = [0] # handles n == 0
result = 1 # next result for n > 0
while result <= n: # handles "...less than or equal to n"
fib.append(result)
result = fib[-1] + fib[-2]
return fib
for i in (-1,0,1,6,20):
print(i,fib(i))
输出:
-1 []
0 [0]
1 [0, 1, 1]
6 [0, 1, 1, 2, 3, 5]
20 [0, 1, 1, 2, 3, 5, 8, 13]
https://stackoverflow.com/questions/40712608
复制相似问题