こんにちは。
順列・組み合わせリスト化ページを作成しようと思っていましたが調べているうちに新しいことが出てきたのでまたメモ書きをしておきます。
JavaScriptの再帰関数というものです。
再帰関数は関数の処理の中で自分自身を呼び出す関数のことを指します。自分を呼び出すということは呼び出した自分もまた自分を呼び出すので無限ループになりそうですが停止条件を設定することで特殊な動きをするループを作ることができます。
サンプルとして総和を求める再帰関数↓
function sum(n) { if (n <= 1) { return 1; } return n + sum(n - 1); }
この関数は 1からnまでの総和を計算しており。例えば、n=3の場合、sum(3)は 1と2と3の合計である6を返します。
if文のところが停止条件でnが1以下になったら1を返すようになっており、return n + sum(n-1) のところで自分を呼び出していますね。
頭がこんがらがりそうですがsum(3)の処理の流れはこうなります↓
①return 3 + sum(2)が実行されるのでsum(2)が呼び出される。
②sum(2)はreturn 2 + sum(1)を実行するのでsum(1)が呼び出される。
③sum(1)はif文の中を実行するのでreturn1によって1が返る。
④sum(1)から1が返ってくるので②のrerun2+sum(1)によってsum(2)から3が返る。
⑤sum(2)から3が返ってくるので①のreturn3+sum(2)によって最終的に6が返る。
停止条件が実行されるとそれを呼び出した関数、さらにそれを呼び出した関数…と帰っていくわけですね。ムズイ(。-`ω-)
再帰関数は階乗の計算なんかに使われるようです。
階乗を求める再帰関数↓
function factorial(n) { if (n <= 1) { return 1; } return n * factorial(n - 1); }
この関数は、nの階乗を計算します。n=3の場合、最終的に3×2×1の6を返します。
再帰関数は流れを考えるのが難しいし普通のループで代用できるので無理に使わなくても良いとは思いますが、誰かのコードを読み解こうと思ったときに知らないものが出てくるとお手上げになるのでこんなのあったな、くらいには記憶に残しておこうと思います。
次回は完成記事になるかな?
犬の線は資料を模写しました。模写も難しいです(;´Д`)