JavaScript再帰関数のいくつかの書き方
5578 ワード
再帰的にはプログラム開発の過程でよく使われます.この記録書で見たいくつかのいい例と注意点です.
再帰関数の例
一番経典のは階乗再帰手続きを求めます.
以下のように呼び出してみます
いくつかの解決方法
使用する
名前付き表現を使う
再帰関数の例
一番経典のは階乗再帰手続きを求めます.
function factorial(num){
if (num <= 1){
return 1;
} else {
return num * factorial(num-1);
}
}
呼び出しプロセスの問題以下のように呼び出してみます
var anotherFactorial = factorial;
factorial = null;
console.log(anotherFactorial(4)); // error
上記のコードを実行すると、factorial
がnullにセットされているためにエラーが発生しますが、再帰的なプログラム内部ではまだfactorial
自体を呼び出しています.このときエラーが発生します.いくつかの解決方法
使用する
arguments
function factorial(num){
'use strict';
if (num <= 1){
return 1;
} else {
return num * arguments.callee(num-1);
}
}
arguments.callee
は実行中の関数を指すポインタであるので、関数の再帰的呼び出しを実現するためにこれを使用することができる.しかし、厳密なモードでは、スクリプトを介してarguments.callee
にアクセスすることはできません.名前付き表現を使う
var factorial = (function f(num) {
if (num <= 1) {
return 1;
}
return num * f(num - 1);
});
var anotherFactorial = factorial;
factorial = null;
console.log(anotherFactorial(4)); //24
上記のコードはf()
という名前付き関数式を作成しました.この方法は厳密で非厳格なモードでも適用されます.