0

私は 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
4

4 に答える 4

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)
于 2013-07-12T21:33:13.157 に答える
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)
于 2013-07-12T21:59:21.103 に答える
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 だけを出力します。

于 2013-07-12T21:24:29.080 に答える
0

それは私のために実行されましたが、しばらく時間がかかりました。range(2, 20) の「20」をより低い値に下げてみてください。単にパフォーマンスの問題だと思います。

于 2013-07-12T21:26:22.230 に答える