首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >怎样才能让斐波那契数列升到n而不结束呢?

怎样才能让斐波那契数列升到n而不结束呢?
EN

Stack Overflow用户
提问于 2016-11-21 12:09:17
回答 6查看 999关注 0票数 0

给定正整数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

这是我目前所拥有的

代码语言:javascript
代码运行次数:0
运行
复制
fib = [0,1]

result = 0

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

回答 6

Stack Overflow用户

发布于 2016-11-21 12:16:04

编辑:如果你的意思是希望列表中的最后一项小于n,那么下面的答案是有效的,否则saurabh的答案是正确的。

如果你在while循环中当前迭代,并且你的结果超过了limit n,会发生什么呢?你还是要把它加进去...

这是一个穷人的方法:

代码语言:javascript
代码运行次数:0
运行
复制
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]

票数 0
EN

Stack Overflow用户

发布于 2016-11-21 12:21:13

代码语言:javascript
代码运行次数:0
运行
复制
fib = [0,1]

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

这应该是可行的。

票数 0
EN

Stack Overflow用户

发布于 2016-11-21 12:48:47

Bug在追加之前没有使用<=和计算新的结果。它可以处理所有的测试用例,也可以处理加0和负数:

代码语言:javascript
代码运行次数: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))

输出:

代码语言:javascript
代码运行次数:0
运行
复制
-1 []
0 [0]
1 [0, 1, 1]
6 [0, 1, 1, 2, 3, 5]
20 [0, 1, 1, 2, 3, 5, 8, 13]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40712608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档