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文字目以降を新たなパラメータとして再起呼び出しを実行します。
と、書いてみてあらためて思いますが、再起ってわかりにくいです。まだまだ修行が足りません。
以上