你可以用一个变量输出Fibonacci序列吗?

时间:2018-01-28 01:44:21

标签: python

嘿,我试图在混合中使用单个变量输出Fibonacci序列。通常,如果我使用2个变量,我会设置如下:

nmbr1 = nmbr2 = 1
while nmbr1 < 100:
  nmbr1, nmbr2 = nmbr1 + nmbr2, nmbr1
  print (nmbr1)

但是如何在python中只用一个变量来完成序列?

4 个答案:

答案 0 :(得分:4)

由于没有人提到变量应该是什么类型的对象,这里使用的是list; - )

x = [1, 1]

while x[0] < 100:
     x = x[1], sum(x)
     print(x[0])

1
2
3
5
8
13
21
34
55
89
144

如果真的想要偷偷摸摸,你可以使用黄色比率近似来使用closed form solution作为Fibonacci系列。

def fib(n): 
    return int((((1 + 5 ** .5) / 2) ** n) / (5 ** .5) + .5)

f = c = 1
while f < 100:
    c += 1
    f = fib(c) 
    print(f)

1
2
3
5
8
13
21
34
55
89
144

这只使用一个变量 - n - 并且会在恒定时间内计算 F[n] 。运行一个循环并继续连续调用fib

答案 1 :(得分:3)

def fib(n):
    if n <= 2: return 1
    return fib(n-1) + fib(n-2)

print fib(12) # the 12th fibinocci number
也许......它的工作方式与你的有点不同,它可能会因大数字而分崩离析

答案 2 :(得分:1)

这是一个有趣的解决方案。 memoization组件由Efficient calculation of Fibonacci series提供。

import functools

@functools.lru_cache(None)
def fib(n):
    if n < 2:
        return n
    return fib(n-1) + fib(n-2)

def fib_yield(n):
    for i in range(n):
        yield fib(i)

list(fib_yield(10))  # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

答案 3 :(得分:1)

是的,绝对同意@ joran-beasley

最快和最先进的技术是Memoization技术,虽然它很复杂。 Memoization避免通过存储它们来计算已计算的值,这里我们可以将它存储在字典中,其位置为键。

我从SO https://stackoverflow.com/a/18172463/5334188

中的一个非常古老的答案中学到了这一点