2016-06-16 19 views
0

9,99,999,9999 ...の数字を検索する関数を書いています。数字の階乗(9!+ 9!99)数値自体より小さい:関数変数の値が返された後に未定義になる

function findLimit(starting_limit){ 
    var starting_limit_string = starting_limit.toString(); 
    var limit_factorial = factorial(9) * starting_limit_string.length; 
    if(limit_factorial > starting_limit){ 
     var new_starting_limit = (starting_limit * 10) + 9; 
     findLimit(new_starting_limit); 
    } else { 
     return starting_limit; 
    } 
} 

var final_limit = findLimit(9); 

ただし、final_limitは未定義です。これは、「return starting_limit」にブレークポイントを設定すると、starting_limitは9999999として明確に定義されます。

ここでは何が起こっていますか?私の関数が返すとき、定義された値がundefinedに変わるのはなぜですか?

+0

そのちょうどまで再帰的に実行されないでしょう – KevBot

答えて

3

あなたがこの行にreturnを忘れてしまった:

findLimit(new_starting_limit); 
+0

undefined' ''あなたはif'に戻っていないので、関数が戻りますそれ以外の条件が満たされているか? –

+0

@SterlingArcher - 既にelse条件が満たされるまで再帰的に実行されます。この変更は、実際にあなたが探している価値を得ることを意味します。 – Quentin

+0

ありがとうございました - 私はそれが愚かなものになるだろうと分かっていましたが、私はそれを探している間ブロックを持っていました。 – sadq3377

関連する問題