例 1 は、スライス操作を呼び出して、開始を特定のインデックスに指定するのと同じです。
例えば:
>>> 'abcde'[2:] == example('abcde', 2)
True
これを確認するには、関数の仕組みに注意してください。最初に、文字列の長さと照合してインデックスが有効かどうかを確認します。次に、インデックスが有効な場合、再帰呼び出しの戻り値の前に付けられたそのインデックスの文字を返します。再帰呼び出しは元の呼び出しと同じですが、インデックスを 1 増やします。これは、関数が基本ケースに到達するまで発生し、その時点で再帰呼び出しを停止し、単純にその基本値である空の文字列を返します。
例 1 で IndexError を簡単に取得できることに注意してください...必要なのは、負のインデックスまたは文字列の長さよりも大きいインデックスを指定することだけです。
2 番目の例では、文字列の文字を指定されたインデックスまで逆順に出力します。index+1
要素に対してそれを呼び出す再帰呼び出しは、現在の呼び出しの前に強制的に返されることに注意してください。これは、再帰呼び出しの print ステートメントが、現在の呼び出しの print ステートメントの前に実行されることを意味します。
たぶん、例は再帰を視覚化するのに役立つでしょう。
'abcde'
あなたの文字列がYou make the callであるとしましょうexample('abcde', 3)
。
3 は文字列の長さより短いため、再帰呼び出しが行われます。example('abcde', 4)
4 は文字列の長さより短いため、別の再帰呼び出しが行われます: example('abcde', 5)
. ただし、この呼び出しでは、インデックスは文字列の長さ (文字列の長さは 5) より小さくならないため、関数は何も出力せずに戻ります。関数が戻ったので、呼び出しに戻ります: example('abcde', 4)
。これで、インデックス 4 の文字 'e' を出力できるようになりました。次に、その関数が戻り、呼び出しに戻りますexample('abcde', 3)
。'd' であるインデックス 3 の文字を出力します。
最後に、関数への元の呼び出しは、「ed」を出力した後に返されます。