Python:使用范围(x,y,n)的斐波那契序列

时间:2016-07-14 16:54:54

标签: python python-3.x range fibonacci

我有兴趣找到一种方法来创建一个获取值的变量并将其存储在另一个变量中,然后获取一个新值。
一个非常实际的例子是Fibonacci序列 我合理地通过可用的python代码搜索了这个序列 对于我的基本把握,有很多,通常太神秘了。

我想出了这个。简单,应该做的工作:

a = 1  
b = 0  
print (b)  
for i in range(0,100):  
 c = b  
 b = a  
 a = c + b  
 print(a)

最后,循环应该打印通过变量a的值,如:
0,1,2,3,5,8,13,21,34,55,89

但那个怪人我一直都在前往100 ^ 10 如该代码的最终输出是:
0,1,2,3,5,8,13,21,34,55,89,144,233,377,...,573147844013817084101

有人会解释发生了什么吗?

2 个答案:

答案 0 :(得分:5)

您正在线路

 c = b  
 b = a  
 a = c + b  
 print(a) 

100次。所以你得到前100个斐波那契数字。

如果要打印最多100的斐波那契数字,请将for循环更改为while循环

while (a < 100):
     c = b  
     b = a  
     a = c + b  
     print(a) 

答案 1 :(得分:0)

您可能更喜欢将这种输出作为列表而不是打印循环中的所有内容。以下是小于 1000 的斐波那契数列:

fib = [1,1]
i = 0
while i < 1000:
    fib.append(fib[-1]+fib[-2])
    i = fib[-1]
#we need to remove the last entry because the loop doesn't stop until the output exceeds 1000.
fib.remove(fib[-1])
print(fib)

获取斐波那契数直到满足特定条件而不是任意数值截止点更有趣。例如,下面的代码使用列表推导式的 while 循环检测 1 之后的第一个斐波那契数,即正方形:

#find the lowest square above 1 in the fibonacci sequence
squares_in_fib = []
squares = []
fib = [1,1]
i=0

while squares_in_fib == []:
    i = i+1
    squares = [x**2 for x in range(1,i)]
    fib.append(fib[-1]+fib[-2])
    squares_in_fib = [x for x in squares if x in fib and x > 1]
print(squares_in_fib)

顺便说一句,我认为 144 是唯一的!