3

実際にフィボナッチが好きなシリーズをPythonで印刷しようとしていますが、追加する代わりに乗算する必要があります。

私のコードは次のとおりです。

def robLan(n):
    if n > 3:
        robLan(n -1) * robLan(n - 2)

    elif n == 1:
        return 1

    elif n == 2:
        return 2

    elif n == 3:
        return 2

list = []
for i in range(1,10):
    z =  robLan(i)
    list.append(z)
print list  

これらは私が得るエラーです:

File "C:\Users\Arjun's\Documents\Aptana Studio 3 Workspace\List\com\__init__.py", line 16, in <module>
    z =  robLan(i)
  File "C:\Users\Arjun's\Documents\Aptana Studio 3 Workspace\List\com\__init__.py", line 3, in robLan
    robLan(n -1) * robLan(n - 2)
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'

ここで何が問題なのですか?

4

3 に答える 3

5

あなたの関数は再帰呼び出しを返しません:

if n > 3:
    robLan(n -1) * robLan(n - 2)

ここに return ステートメントがない場合、関数は明示的な return なしで終了し、None代わりに返されます。

>>> robLan(4) is None
True

上記は返されたはず4です(roblan(3) * roblan(2)を与え2 * 2ます4)。開始値が 5 以上の場合、関数は複数レベルの再帰を使用し、None戻り値は乗算に使用されます。

追加return:

if n > 3:
    return robLan(n - 1) * robLan(n - 2)

ステートメントを簡略化できます。

def robLan(n):
    if n > 2:
        return robLan(n - 1) * robLan(n - 2)
    return n

次に、サンプル ループが次を生成します。

[1, 2, 2, 4, 8, 32, 256, 8192, 2097152]
于 2013-09-07T12:32:46.390 に答える
1

n > 3 の場合は値を返す必要があります

于 2013-09-07T12:47:41.147 に答える
0

これは完全に修正されたコードです。

def robLan(n):
    if n > 3:
        return robLan(n -1) * robLan(n - 2)

    elif n == 1:
        return 1

    elif n == 2:
        return 2

    elif n == 3:
        return 2

list = []
for i in range(1,10):
    z =  robLan(i)
    list.append(z)
print list 
于 2013-09-07T17:53:57.553 に答える