このエラーが発生します:
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の場合はどうなりますか?これを処理するためのさらに別のケースがあるはずです。