2016-11-16 10 views
-1

この再帰関数がなぜ返されないのか誰かが私に説明することができます。前もって感謝します。あなたはあなたにいくつかのより多くの情報を表示するために、わずかにそれを変更した場合、あなたが見ることができるようJavaScript関数が返さない/終了しない

var numberArr = [5,4,3,2]; 
 

 
function findCommon(x) {  
 
    x += numberArr[0]; 
 
    for (var i = 1; i < numberArr.length; i++) { 
 
    if((x % numberArr[i]) === 0) { 
 
     continue; 
 
    } else { 
 
     findCommon(x); 
 
    }  
 
    } 
 
    console.log("done " + x); 
 
    return x; 
 
} 
 

 
findCommon(0);

+3

"返されずに終了しない"という意味は私には分かりません。 –

+2

これはinfinteループで実行されます...常に最初の要素とのみ比較しています – Geeky

+0

基本条件は何ですか...実行したいときまで – Geeky

答えて

0

...あなたのコードに何が起こっているかとてもトリッキーですabouveコードを試してみてください。実際にはあなたの関数findcommon(x)がそれ自身を呼び出していて、何が起きているのかは、現在の関数と呼び出す関数を実行することです。それは私たちがfindcommon(x)を一度呼び出すと、現在から破られなくても終わらないことを意味します。両方の機能を1つずつ完了します。

var numberArr = [5,4,3,2]; 

function findCommon(x) {  
    x += numberArr[0]; 
    for (var i = 1; i < numberArr.length; i++) 
    { 
    if((x % numberArr[i]) === 0) 
    { 
     continue; 
    } 
    else 
    { 
     findCommon(x); 
    }  
    } 
    console.log("done " + x); 
    return x; 
} 
//findCommon(3); 
console.log("done " +findCommon(3)); 

例えば:私は、関数Aから関数Bを呼び出す場合、それはBとあなたの関数findCommon(x)のような 両方を完了します。それを何度も自己呼びます。それが再帰的に来る理由です。それが役に立ちます。

0

あなたのコードは、戻り値で終了しません。

var numberArr = [5,4,3,2]; 
 

 
function findCommon(x) {  
 
    x += numberArr[0]; 
 
    for (var i = 1; i < numberArr.length; i++) { 
 
    if((x % numberArr[i]) === 0) { 
 
     console.log("Continuing: " + i) 
 
     continue; 
 
    } else { 
 
     console.log("B: " + findCommon(x)) 
 
    }  
 
    } 
 
    console.log("done " + x); 
 
    return x; 
 
} 
 

 
console.log("A: " + findCommon(0));

+0

私のコンソールログ "done 60"の後に "return x"を押して終了する必要がありますが、それは継続しています。 – Yas

0

私は以下のコードで私の目的をachived。どのように私はグローバルvarまたは私はこれをやったことができる別の方法を返すことを避けることができたかに関する任意の提案。

var numberArr = [5,4,3,2]; 
 
var y; 
 

 
function findCommon(x) {  
 
    x += numberArr[0]; 
 
    for (var i = 1; i < numberArr.length; i++) { 
 
    if((x % numberArr[i]) === 0) { 
 
     console.log("continue " + x); 
 
     continue; 
 
    } else { 
 
     console.log("not div " + x); 
 
     findCommon(x); 
 
     return y; 
 
    }  
 
    } 
 
    y = x; 
 
    console.log("done " + x); 
 
} 
 

 
findCommon(0);

関連する問題