Warmup-2>last2

 お世話になっております。
 皆様はCodingBat*1というものをご存知でしょうか。私も最近その存在を知り、ぼちぼち進めております。TDDでプロダクトコードを書かされる側を体験できます。

 さて、私はPythonに取り組んでいますが、上記の問題は再起を使って解きました。この記事はそのときの考えをまとめたメモです。
 まず、コードを記載します。

def last2(str):
    # 1. パラメータのチェック
    if len(str) < 2:
        return 0

    # 2. 処理の実体
    index = str.find(str[-2:])

    # 3. 処理の結果を判定
    if -1 == index:
        return 0
    elif index == len(str) - 2:
        return 0
    return 1 + last2(str[index + 1:])

 再起を使うときは、まずパラメータのチェックをします。処理をするまでもないパラメータについては、ここではじいてしまいます。今回はパラメータの長さをチェックし、2文字未満のときに0を返します。ほかには、nullチェックなどが考えられます。
 次に、処理を実行します。この問題の処理の実体は、パラメータの文字列から末尾2文字を探すことでした。
 最後に、処理の結果による分岐です。大きく分けると、再起を実行する/しないに分岐します。この問題では、探したけど見つからなかったときと、見つかったのが末尾2文字自身のとき、再起を実行せずに0を返します。それ以外の時は再起を実行します。再起呼び出しを実行するときは、必ずパラメータを変更します。ここでは、パラメータの文字列の中から、見つかった文字列の2文字目以降を新たなパラメータとして再起呼び出しを実行します。

 と、書いてみてあらためて思いますが、再起ってわかりにくいです。まだまだ修行が足りません。

以上