SE Can't Code

A Tokyo based Software Engineer. Not System Engineer :(

再帰関数の実装

再帰関数とは定義した関数をその関数内で呼び出すことを指す。
再帰関数で重要なことは、ベースとなるケースを定義することである。停止条件とも言い換えることが出来るが、ベースケースが無いと循環的に呼び出しが行われ、無限ループに入ってしまう場合がある。
以下のコードは回分であるかどうかを判定するコードである。is_palindrome関数は、両極端の文字の突合を再帰させながら行っている。また、iter_palindrome関数は、再帰関数ではなく単純なループ文として実装している。

is_palindrome関数の4行目のif文はベースモデルを指している。今回は回分か否かの判定であるため、唯一わかっている回答として、「文字列が"空白"であった場合、回分である」としている。このベースケースは、再帰関数の終着点とも言える。6〜7行目では、両極端の文字の突合が再帰関数で行われており、再帰関数はN/2の回数分呼び出されることとなり、ベースケースの終着点に到達した際に返り値を返す動きとなる。
再帰関数はループを行う実装と違い、クールな実装となるが、再帰回数分呼び出しを行うため、ループ処理よりもメモリを圧迫する欠点がある。そのため、今回の実装で挙げている程度の処理ならば問題なくパフォーマンスを出すことができるが、たとえば大きな数目の計算を行ったりするとマシンによってはパフォーマンスが発揮できなくなる。その場合はループ処理を用いた方がいいこともあるため、用途別に使い分けることがよい。

Simple is Best !! 再帰関数でクールな実装をしよう!

Remove all ads