我在Python中的斐波那契序列计算有什么问题?

我在Python中的斐波那契序列计算有什么问题?,python,recursion,fibonacci,Python,Recursion,Fibonacci,我是Python新手,想知道递归是否有效。我无法运行我的代码。它应该打印所有斐波那契数: #!/usr/bin/python import time, sys def calc_fib_num(n): if (n >= 2): return calc_fib_num(n-1) + calc_fib_num(n-2) elif (n == 1): return 1 else: return 0 print "0", print "1", for n

我是Python新手,想知道递归是否有效。我无法运行我的代码。它应该打印所有斐波那契数:

#!/usr/bin/python
import time, sys

def calc_fib_num(n):
  if (n >= 2):
    return calc_fib_num(n-1) + calc_fib_num(n-2)
  elif (n == 1):
    return 1
  else:
    return 0

print "0",
print "1",

for n in range(2,20):
  fib_num = calc_fib_num(n)
  print fib_num

我可以确认它在Python2.7上确实有效。我刚刚将其粘贴到Python终端中:

Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> #!/usr/bin/python
... import time, sys
>>> 
>>> def calc_fib_num(n):
...   if (n >= 2):
...     return calc_fib_num(n-1) + calc_fib_num(n-2)
...   elif (n == 1):
...     return 1
...   else:
...     return 0
... 
>>> print "0",
0
>>> print "1",
1
>>> 
>>> for n in range(2,20):
...   fib_num = calc_fib_num(n)
...   print fib_num
... 
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
>>> 

当然,正如你所说,它不会打印所有的斐波那契数,只打印前20个。

它为我运行,但需要一段时间。尝试将范围(2,20)中的“20”降低到较低的值。我认为这只是性能问题。

您不需要为此问题导入任何库。不过试试看

def fib(n):
    if n == 1:
        return 1
    elif n == 0:
        return 0
    else:
        return fib(n-1) + fib(n-2)

for n in range(2,20):
    print fib(n)
def fib(n):

如果它根本不运行,或者只需要永远运行,则返回n?您使用的是指数时间算法(它会将每个值重新计算疯狂的次数),因此需要地质时间尺度才能完成。看起来它应该可以工作(尽管速度很慢)。观察到的输出是什么?看起来20小到足以在合理的时间内完成,至少在我的机器上。您的Python设置可能有一些问题。
def fib(n):
    return n if n<2 else fib(n-1) + fib(n-2)

for n in range(2,20):
    print fib(n)