つまり, addという関数を作ったらadd関数の中でadd関数を呼び出すことです。
つまり下のようです。
function add(){ add(); }
この例は数学で出る階乗(factorial)を利用して例を作ります。
いきなり数学に関するのが出てきて頭が痛くなる方もいると思いますが、
俺って階乗について知らないから、この講座から出ると思う方もいると思いますが、
心配しないでください。
5! こう書いて, 5!を解けてとしたら 5*4*3*2*1 なので 120が答えです。
こう階乗(factorial)について調べました。
では 10! はなんでしょうか。
10*9*8*7*6*5*4*3*2*1 計算します。. ^-^* 答えは 4,939,200です。
では、自分自身の関数を呼び出す再起関数について調べましょう。
ソースは次のようです。
function factorial(fnum){ end_num = 1; if (fnum == end_num) { return end_num; } else { return fnum * factorial(fnum-1); } } document.write(factorial(3));
document.write(factorial(3));
関数呼び出しは出力文の内で3をアーギュメントで送ります。
function factorial(fnum){ end_num = 1; if(fnum == end_num) return end_num; else return fnum*factorial(fnum-1); } document.write(factorial(3));
end_num = 1;
再帰関数は自分が1になるまで掛けるからです。
if(fnum == end_num) return end_num;
end_numのバリュー 1で fnumのバリューは 3です。 fnumバリューが 1になると end_numバリューを返還してという意味です。
else return fnum*factorial(fnum-1);
fnum*factroial(fnum-1)を返還します。. fnumのバリューが 3だとしたら、
3*factorial(2)を返還します。 ではこの部分はまた関数呼び出しになります。
しかし バリューをもらいましたが呼び出し文な factroial(2)があるから関数は呼び出され 2を あーギュメントのバリューにしてelse文をあって2*factorial(1)を返還します。
そうしたら呼び出し文なfactorial(3)は 3*2*factorial(1)になりますね factorial(1)は 呼び出され end_numのバリューと同じなので1を返還し
呼び出し文は3*2*1を出力バリューにします。
もう一度簡単に説明すると、
関数呼び出し factorial(3)を実行
fnumバリューが 3になり else文によって3*factorial(2)を返還
3*factorial(2)에서 factorial(2)는 함수 호출 하고 매개변수값이 2이므로, else문을 만나서 2*factrorial(1)을 반환하고 1을 매개변수 값으로 해서 호출하고
3*factorial(2)で factorial(2)は関数呼び出してアーギュメントのバリューが2なので、 else文をあって 2*factrorial(1)を返還し 1をアーギュメントのバリューとして呼び出して
end_numと fnumが 一致するのでif文をあって 1を返還,
関数は 3*2*1を返還します。^^
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>everdevel JavaScript</title> <script> function factorial(fnum){ end_num = 1; if(fnum==end_num) return end_num; else return fnum*factorial(fnum-1); } value = 3; document.write(value + "! = "+factorial(value)); </script> </head> <body> </body> </html>
結果
これで再起関数は終わりです。ありがとうございます。
ご覧くださってありがとうございます。お問い合わせと間違い説明はある場合、下にあるコメントにお願いいたします。
//=$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']?>コメント 0個
並べ替え