My days of...

生活のことなど、がんばろう

再帰関数ってよくわからない。慣れるしかないとかなんとか・・・

Python勉強中。で、再帰について。

よくわかりません、再帰。関数を定義している中でその関数(自分自身)を呼びます。慣れている人にはわかりやすく、慣れないとどうなってるの?となるそうです。無論自分は後者です。

再帰の問題をいろいろやってみました。ハノイの塔とかフィナボッチ数列とかがありますが、よくわかりません。それで、「たけやぶやけた」などどちらから読んでも同じになる回文を証明する、という問題をやってみました。

その前に再帰の条件ですが、

  1. 再帰終了条件をもつ
  2. 状態を変えながら、再帰終了条件へ近く
  3. 再帰的に関数自身を呼び出す

の3つの条件が必要となるそうです。

回答ですが、

def isPal(s):
if len(s) < 2:
return True
if s[0] != s[-1]:
return False
return isPal(s[1:-1])

 となりました。回答は検索してみつけました。理解できなかったところとしては、最後のisPal(s[1:-1])の部分。この部分は+1、-1を自動的に計算していってくれている、という理解でいいんですかね。なんで自動でやってくれるのでしょう?そういうものだから?で慣れることが大事なのかもしれません。

もう一つ、文字列を反対に並べるというもの。pythonの場合は[::-1]を使うと簡単にできますが、再帰関数の練習なので

def reverse_string(s):
w = ""
if len(s) > 0:
if len(s) == 1:
return s[0]
# print(len(s))
w += s[len(s)-1]
return w + reverse_string(s[:len(s)-1])
else:
return w

 これは自分で考えましたが、なんか微妙な感じです。もう少し良い書き方があるのでしょうけど思いつかず・・・

慣れるための練習問題やいい方法はどこかにないだろうか。

再帰の技法??基本的考え方・アルゴリズム・プログラミング

再帰の技法??基本的考え方・アルゴリズム・プログラミング