我已经编写了该程序的两个版本和python的新版本。打印Fibonacci系列时,我无法理解出了什么问题。第一个程序正确打印了斐波那契数列,但是第二个程序有问题。请让我知道怎么了。
程序1
def fib(n): # write Fibonacci series up to n
"""Print a Fibonacci series up to n."""
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a+b
print()
# Now call the function we just defined:
fib(2000)
输出
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
程序2
# Let make a function that prints a Fibonacci
def fib(n): # write Fibonacci series up to n
"""Print a Fibonacci series up to n."""
a = 0
b = 1
while a < n:
print(a, end=" ")
a = b
b = a+b
fib(2000)
输出
0 1 2 4 8 16 32 64 128 256 512 1024
答案 0 :(得分:3)
诀窍在于:
a, b = b, a+b
这会将b
的值分配给a
,并将a+b
的值分配给b
,但是这样做是在a
被分配新值之前值。
您将其替换为:
a = b
b = a+b
此操作首先更改a
,然后才将a+b
分配给b
。如果您想这样做,可以这样做:
c = a+b
a = b
b = c
类似的东西,但是我认为原始的解决方案是更清洁的解决方案,尽管显然不够直观,因为它使您感到困惑:)
答案 1 :(得分:0)
a = b
b = a+b
与
不同a, b = b, a+b
在第一个版本中:
当执行第一行时,a
的旧值被破坏
所以第二行相当于b = b+b
所以在每次迭代中b都分配给2 * b,因此序列1,2,4,8 ...
答案 2 :(得分:0)
a, b = b, a+b
与a = b; b = a+b
不同。特别是在评估a
时a+b
的值是不相同的。