を停止する方法を再帰的な階乗関数を知っているん:私は再帰を実践するために、再帰的階乗関数を記述しようとすると、この思い付いたとき
function test(num){
return (num * test(num - 1))
}
私はそれを実行するたびにしかし、それは永遠にループし、レンジエラー:最大コールスタックサイズを超えました。
しかし、私は
function factorial(num) {
if (num < 0) {
return -1;
} else if (num === 0) {
return 1;
} else {
return (num * factorial(num - 1));
}
}
、それは例外を処理するために書く場合、それは完璧に動作します。
2件
なぜ最初のものは機能しませんか?
どのようにして実行を停止するかを知っていますか? numが実際に変更された場合、それは最終的に0にヒットすることにより、-1たびに値だとそれがあれば、他の引き金と1を返しますが、あなたは階乗実行する場合(3)それは6
最初のものは常に自分自身を呼び出す( 'test()') - 停止する条件はありません。 2番目は 'num === 0'のときに止まります。 – bejado
2番目の文は 'if()'文を持ち、それが基底の場合に再帰しません。これは再帰の本質です。 – Barmar
2を返すにもかかわらず、1を返しても、その結果は呼び出された関数(num = 1)でnumを掛けてから呼び出しスタックを2回上回るので、 – samgak