Python 如何使斐波那契数列上升到n,而不是完全结束

Python 如何使斐波那契数列上升到n,而不是完全结束,python,algorithm,Python,Algorithm,给定正整数n创建一个由小于或等于n的斐波那契序列部分组成的列表。例如,如果n是6,则列表将是[0,1,1,2,3,5],如果n是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[

给定正整数
n
创建一个由小于或等于n的斐波那契序列部分组成的列表。例如,如果
n是6
,则列表将是
[0,1,1,2,3,5]
,如果
n是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)
fib=[0,1]
结果=0
当结果
编辑:如果您的意思是希望列表中的最后一个术语小于
n
,则以下内容有效,否则saurabh的答案是正确的

如果您在while中循环当前迭代,并且结果超出限制,会发生什么情况?你还是要加上它

下面是一个穷人的做法:

fib = [0,1]

result = 0
n = 6
while result < n:
    result = fib[-1] + fib[-2]
    if (result < n):
        fib.append(result)
print(fib)
fib=[0,1]
结果=0
n=6
当结果
对于6:
[0,1,1,2,3,5]
对于20:
[0,1,1,2,3,5,8,13]
fib=[0,1]
fib = [0,1]

result = fib[-1] + fib[-2]
while result < n:
    fib.append(result)
    result = fib[-1] + fib[-2]
结果=fib[-1]+fib[-2] 当结果

这应该会起作用。

当您的条件是针对最后一个数字设置时,您应该针对列表中的元素总数设置它

fib = [0,1]

result = 0
count = 20
while len(fib) < count :
    result = fib[-1] + fib[-2]
    fib.append(result)
print(fib)
print(len(fib))

您只需将其打印出来:

fib[-2]


这将打印出bug没有使用的编号。别忘了你也可以弹出

代码如下:

n = 20
fib = [0, 1]
while fib[-1] <= n:
    fib.append(fib[-2] + fib[-1])
fib.pop()

手动浏览你的代码,你就会明白为什么。。。
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]
n = 20
fib = [0, 1]
while fib[-1] <= n:
    fib.append(fib[-2] + fib[-1])
fib.pop()
[0, 1, 1, 2, 3, 5, 8, 13]