Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python文档中的这段斐波那契代码与我的重新实现相比,我做错了什么?_Python_Fibonacci_Comma - Fatal编程技术网

python文档中的这段斐波那契代码与我的重新实现相比,我做错了什么?

python文档中的这段斐波那契代码与我的重新实现相比,我做错了什么?,python,fibonacci,comma,Python,Fibonacci,Comma,Python文档: >>> def fib(n): a,b=0,1 while a<n: print a, a,b=b,a+b >>> fib(2000) 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 def fib(n): a、 b=0,1 而fib(2000年) 0 1 1 2 3 5 8 13 21 34 55 89 144 233 3

Python文档:

>>> def fib(n):
    a,b=0,1
    while a<n:
        print a,
        a,b=b,a+b

>>> fib(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
def fib(n): a、 b=0,1 而fib(2000年) 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 我的重新实施:

>>> def fib2(n):
    a=0
    b=1
    while a<n:
        print a
        a=b
        b=a+b

>>> fib2(2000)
0
1
2
4
8
16
32
64
128
256
512
1024
def fib2(n): a=0 b=1 而a>>fib2(2000) 0 1. 2. 4. 8. 16 32 64 128 256 512 1024 但是
a,b=b,a+b
这更像是一个蟒蛇式的

a,b=b,a+b

在第二种情况下,
a
被赋值为
b
,然后
b
被赋值为
a
b
之和,这意味着它是原始值的两倍

考虑:

a = 1
b = 2
a,b = b,a+b
这给

a==2 (old value of b)
b==3 (sum of 1 and 2)
相反地:

a = 1
b = 2
a = b
b = a + b
其中:

a==2 (old value of b)
b==a+b==2+2==4 (twice the old value of b)

不同之处在于,当您这样做时:

a,b=b,a+b
#     ^
我标记的
a
a
的原始值,而不是更新后的值。这是因为Python总是先计算
=
符号右侧的内容,然后再计算左侧的内容

但是,当您执行此操作时:

a=b
b=a+b
第二行中的
a
是在上一行中分配的
a
的新值。这会导致您的计算被关闭

有关更多信息,请参阅Python中的


要获得与Python文档中的函数相同的行为,您需要一个临时变量来保存
a
的原始值:

tmp=a
a=b
b=tmp+b
下面是一个演示:

>>> def fib2(n):
...     a=0
...     b=1
...     while a<n:
...         print a, # The comma causes everything to be printed on one line
...         tmp=a
...         a=b
...         b=tmp+b
...
>>> fib2(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
>>>
更像是蟒蛇。尽管我建议您放置一些空格:

a, b = b, a+b

可读性是Python的一切。

我相信这是逗号语法的一个细节。尝试:

c=b
b=b+a
a=c

谢谢,我是python新手,这是一个非常有用的答案,在我完成之前,python与Java是如此不同!谢谢,我是python新手,这是一个非常有用的答案,在我完成之前,python与Java是如此不同!将其实现为这样一个递归函数会更容易:但将其递归为一个巨大的n不会使程序比pyth docs实现慢吗?@Aditya_Pan我怀疑它会变慢。但是,对于大型n来说,一个潜在的问题是,它将耗尽堆栈空间并抛出stackOverFlow错误。递归执行最适合函数式编程语言。最好在python中迭代执行
>>> def fib2(n):
...     a=0
...     b=1
...     while a<n:
...         print a, # The comma causes everything to be printed on one line
...         tmp=a
...         a=b
...         b=tmp+b
...
>>> fib2(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
>>>
a,b=b,a+b
a, b = b, a+b
c=b
b=b+a
a=c