1

このエラーが発生します:

TypeError:+のサポートされていないオペランドタイプ:'int'および'NoneType'

このコードの場合:

def a(n):
    if n < 0:
        return 0
    if n == 1:
        return 1
    if n > 1:
        return a(n-1) + a(n-2) + a(n-3)

複数の再帰をどのように呼び出す必要がありますか?

4

4 に答える 4

4

条件がありません:- 1 > n >= 0n >= 0したがって、およびの場合に備えて、値を返すことはありませんn < 1

あなたの最初の条件は次のようになっている可能性があります:-

if n < 1:
    return 0
于 2012-12-18T20:16:12.327 に答える
1

Rohitの答えを詳しく説明すると、Python関数が何も返さずに最後に到達した場合、暗黙的にNoneを返します。だからa(0.5)戻りNoneます。たとえばa(1.5)、を呼び出すと、a(0.5)+a(-0.5)+a(-1.5)どちらが評価されNone+0+0、説明したエラーが発生するかがわかります。

于 2012-12-18T20:19:25.523 に答える
0

問題は、n = 0の場合、これを処理するifステートメントがないため、python関数が暗黙的にNoneTypeオブジェクトを返し、次のように変更することです。

def a(n):
    if n <= 0:
        return 0
    if n == 1:
        return 1
    if n > 1:
        return a(n-1) + a(n-2) + a(n-3)
于 2012-12-18T20:22:42.523 に答える
0

これを試して:

def a(n):
    if n <= 0:
        return 0
    elif n == 1:
        return 1
    else:
        return a(n-1) + a(n-2) + a(n-3)

秘訣は、考えられるすべての値カバーする必要があるということです。あなたはカバーしていませんでしn == 0た、そして最後の条件はであるはずですelse、それで他の選択があり得ないことは明白です。

unsupported operand type(s) for +: 'int' and 'NoneType'いずれの条件も満たされない場合(たとえば、の場合n == 0)にNoneが返され、再帰のある時点でintがに追加されてエラーが発生したため、エラーが以前に発生したことに注意してNoneください。これが、再帰のすべての可能性をカバーするときに非常に徹底的になり、すべての可能なケースが考慮されていることを確認することが重要である理由です。

ちなみに、何かがあなたが1つのケースを逃していることを教えてくれます。n == 2の場合はどうなりますか?これを処理するためのさらに別のケースがあるはずです。

于 2012-12-18T20:23:37.880 に答える