第62回:JavaScript講座本編7「再帰」
どうも、シノです。
間が空いて申し訳ない、ちょっと色々浮気してました…
さて、今回はJavaScript講座本編第7回です!
今回は、前回の予告編で使用した「再帰」というものを解説していきます!
予告編はこちら。
これ、使えなくてもいいっちゃいいんですが、使えるとかなり効力があります。
でも、何をしているか直感的にわかりづらくなるという諸刃の剣です。
使う場合は、慎重にいきましょう。
目次です。
0.前回の復習
前回は、「配列」について解説しました。
大量の変数を使用する場合は、配列で管理すると楽だよって内容でしたね。
1.「再帰」って何?
再帰とは、ある関数の中で自分自身を呼び出して処理するような書き方のことです。
例えば、数学の数列の問題なんかがわかりやすいでしょうか。
初項が1、公差が3の数列a(n)で、10番目の数字を求めたいとしましょう。
つまり、漸化式で表すと以下の通りです。
- a(1) = 1
- a(n) = a(n-1) + 3 (n ≧ 2)
あ、公式で求められますが、いったん公式は忘れてください。
こんなとき、以下のように分解できます。
- a(10)
- ∟a(9) + 3
- ∟a(8) + 3
- ...
- ∟a(1) + 3
- ...
- ∟a(8) + 3
- ∟a(9) + 3
ちょっとわかりづらいでしょうか。
要するに、a(10)を求めるためにはa(9)を求めて、それに3を足せばいいです。
そして、a(9)を求めるには、a(8)を求めて、それに3を足します。
これを繰り返していくんですね。
で、最後にa(1)になったら、これは1なので、計算してa(2)は4、a(3)は7というふうに求めていきます。
2.実際に使ってみよう
サンプルソースを先に出してしまいましょう。
function getA(n){
if(n == 1){
return 1;
}
return getA(n-1) + 3;
}
この関数の中で、自分自身を呼んでいますね。これが、再帰です。
ちなみに、これを使って答えを求める例を以下に貼ってみました。
数字を変えても計算できるので、試してみてください。
ただし、0以下の数字を入力すると0が返るようになってます。
答え:
ここで、注意点です。
上の例もそうなのですが、必ず「こうなったら自分を呼ぶのをやめる」という処理を書いてあげましょう。
でないと、延々と自分を呼び続け、エラーを吐いたり固まったりしてしまいます。
3.で、前回の数独は?
…ごめんなさい、いきなりあれはちょっと難しかったのでやめます。
実は、この再帰とは別で「バックトラック法」という考え方を使っているんです。
その解説からとなると、かなり時間がかかってしまうため、ここでは解説しません。
気になる方は、「バックトラック」で検索すると出てくるので、調べてみてください。
まあ、これはどちらかというと考え方なので、知っておくといいくらいの内容です。
4.じゃあこれからどうすんの?
って話になりますが…
実は、次回以降の内容が決まりました!
次回以降から、「jQuery」を解説していこうと思います!!
ちょこっと触ってみたんですが、結構簡単でしかも動きがつけれるので、モチベーションが上がりまくってて…
その触ってみた結果が以下の記事です。
というわけで、次回以降にご期待ください!
まとめ
今回は「再帰」について簡単に触れました。
これは、JavaScriptに限らず色々な言語で使えますが、注意点も様々です。
本当にそれしかやる方法がない、という場合以外には使わない方がいいでしょう…
上でも書いた通り、次回からは「jQuery」を扱いたいと思います!
更新情報はTwitterでも流してます。よかったらどうぞ。
それでは。