Python : 使用 range(x,y,n) 的斐波那契数列

Python : Fibonacci sequence using range(x,y,n)

我有兴趣找到一种方法来创建一个获取值的变量并将其存储在另一个变量中,然后获取一个新值。
一个接近的实际例子是斐波那契数列。
我合理地搜索了此序列的可用 python 代码。
有很多,对于我的基本理解来说通常太神秘了。

我想到了这个。简单且应该做的工作:

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

最后,循环应该打印通过变量 a 的值,如:
0,1,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

有人能解释一下发生了什么吗?

您 运行 通过了

 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) 

您可能更喜欢将这种输出作为列表而不是在循环中打印所有内容。以下是小于 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是唯一的!