2013-07-12 75 views
0

我是Python新手,想知道遞歸是否可以工作。我無法讓我的代碼運行。它應該打印所有斐波那契數字: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 
+1

好像它應該工作(雖然緩慢)。觀察到的輸出是什麼? – inspectorG4dget

+2

它根本沒有運行,或者只是永遠持續?您使用的是指數時間算法(它會將每個值重複計算瘋狂的次數),因此預計會花費地質時間表來完成。 – user2357112

+0

http://docs.python.org/2/tutorial/introduction.html#first-steps-towards-programming – mata

回答

0

我可以證實它對我來說確實對Python 2.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

0

它跑了我,但它花了一段時間。嘗試將範圍(2,20)中的「20」降至較低值。我認爲這只是一個性能問題。

0

您無需爲此問題導入任何庫。儘管給這個鏡頭。

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) 
0
def fib(n): 
    return n if n<2 else fib(n-1) + fib(n-2) 

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