再帰関数は、自分自身を呼び出す関係です。
って、わかるかー
ちゃぶ台があったら、ひっくりかえしたい気分です。
とりあえず、サンプル見てちょうだい。
有名なところで、1~100まで足す問題を解いてみたいと思います。
あ、これって、そろばんの準備運動でもやるみたいです。
nouzui2007的に一番簡単なのは、ループでまわして加算する方法なので、まずはそのサンプル
scala> var total = 0 total: Int = 0 scala> for (i <- 1 to 100) { | total += i | } scala> total res28: Int = 5050
これを、本日のお題で書き直し
なんか、大喜利みたいです。
scala> def Recursive(n: Int): Int = n match { | case 1 => 1 | case _ => n + Recursive(n - 1) | } Recursive: (n: Int)Int scala> Recursive(100) res29: Int = 5050
今日は、こっから解説です。
・・・大丈夫かなぁ?
大事なことを忘れないうちに言っておきますが、
戻り値の指定は、絶対に必要です。
このサンプルの処理は、こんな感じで動いています、とゆーのを感じてください
- 引数100がきたら、デフォルトにマッチするので、その処理を行う
- マッチした処理では、引数100から1を減算したものを引数に渡して、自分自身を呼び出している
- 今度は、引数99で来るので、やっぱりデフォルトにマッチ
- 引数99から1減算して、また自分を呼び出す
- ・・・って順番で2まで処理すると、自分自身への引数が1になる
- 引数が1だったら、なにも足さないので、1を返す
- 引数が2だったら、1が戻ってくるので、引数の2と戻り値の1を加算する
- 引数が3だったら、3が戻ってくるので、引数の3と戻り値の3を加算する
- ・・・100まで、繰り返し
がんばってみましたが、いかがでしょうか。nousui2007はもうだめです。
また今度。
0 件のコメント:
コメントを投稿