再帰関数ってよくわからない。慣れるしかないとかなんとか・・・
よくわかりません、再帰。関数を定義している中でその関数(自分自身)を呼びます。慣れている人にはわかりやすく、慣れないとどうなってるの?となるそうです。無論自分は後者です。
再帰の問題をいろいろやってみました。ハノイの塔とかフィナボッチ数列とかがありますが、よくわかりません。それで、「たけやぶやけた」などどちらから読んでも同じになる回文を証明する、という問題をやってみました。
その前に再帰の条件ですが、
の3つの条件が必要となるそうです。
回答ですが、
def isPal(s):if len(s) < 2:return Trueif s[0] != s[-1]:return Falsereturn 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
これは自分で考えましたが、なんか微妙な感じです。もう少し良い書き方があるのでしょうけど思いつかず・・・
慣れるための練習問題やいい方法はどこかにないだろうか。
- 作者: 玉井浩
- 出版社/メーカー: 株式会社エスアイビー・アクセス
- 発売日: 2006/11/16
- メディア: 単行本(ソフトカバー)
- 購入: 2人 クリック: 37回
- この商品を含むブログ (7件) を見る