2017-01-21 15 views
0

私は 'success'の値を期待していますが、未定義です。理由を理解しないでください。JavaScriptの再帰関数が返されるのは未定義です

var recursion = function(n) { 
 
    if (n == 0) { 
 
    console.log('yup'); 
 
    return 'success'; 
 
    } 
 
    console.log(n) 
 
    recursion(n - 1); 
 
} 
 

 
var x = recursion(10); 
 

 
console.log(x);

+0

'return recursion(n - 1);' –

+0

興味深い...私の頭を包むのは難しいですね。関数を返すと、関数が復帰しないことを期待しています。戻り値は再び実行されません。 –

答えて

3

条件が満たされない場合ときには、あなたのコード内でreturn文がありませんreturn recursion(n - 1);

2

する必要があります。

var recursion = function(n) { 
 
    if (n == 0) { 
 
    console.log('yup'); 
 
    return 'success'; 
 
    } 
 
    console.log(n) 
 
    return recursion(n - 1); 
 
    //--^-- 
 
} 
 

 
var x = recursion(10); 
 

 
console.log(x);

-1

変化に:

すでに述べたように
return recursion(n-1) 
0

は、あなたが興味深いreturn recursion(n - 1);

に必要...ザッツ周り私の頭をラップするのは難しいです。私は私が再び実行されない値を返す破るための機能を期待してい関数を返したとき...

しかしn !== 0あなたの関数の場合には何も返しません。

再帰は単純な関数呼び出しであり、特別なものではありません。ループのようなものではありません。breakreturnステートメントは、呼び出しスタック全体を通して結果をフラッシュしません。なぜなら、関数自体が呼び出されたからです。直接呼び出し元にのみ返します。そして、あなたの場合、一番上の関数呼び出しrecursion(10)は何も返さないものなので、undefinedです。

関連する問題