このエラーが発生します:
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)
複数の再帰をどのように呼び出す必要がありますか?
条件がありません:- 1 > n >= 0
。n >= 0
したがって、およびの場合に備えて、値を返すことはありませんn < 1
。
あなたの最初の条件は次のようになっている可能性があります:-
if n < 1:
return 0
Rohitの答えを詳しく説明すると、Python関数が何も返さずに最後に到達した場合、暗黙的にNoneを返します。だからa(0.5)
戻りNone
ます。たとえばa(1.5)
、を呼び出すと、a(0.5)+a(-0.5)+a(-1.5)
どちらが評価されNone+0+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)
これを試して:
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の場合はどうなりますか?これを処理するためのさらに別のケースがあるはずです。