2016-10-10 7 views
-7

なぜ私は5ではなく0を返すのか理解しています。 "i"は最後のreturn文にヒットする前にインクリメントされ続けますが、スタックの最初の呼び出しから常に0が返されます。私は、スタック上の最新の呼び出しがブロック内のリターンを打つので、「私は== 5」最初のそれは5なぜ再帰はスタック内の最初の呼び出しを返しますが、最後の呼び出しは返しません。

戻り値0

public static void main(String[] args) { 
     System.out.println(incrementI(0)); 
}  


public static int incrementI(int i) { 
    if (i == 5){ 
     return i;   
    } else { 
     incrementI(i + 1); 
    } 

    return i;  
} 

戻り値5を返し、印刷と思うだろう

public static int incrementI(int i) { 
    if (i == 5){ 
     return i;   
    } else { 
     return incrementI(i + 1); 
    }    
} 
+1

java!== javascript –

+4

'something()'とは何ですか?それは 'incrementI()'であると思いますか? – Pointy

+0

'something(int i)'は何をするのですか? – Pavel

答えて

3

あなたは、このような機能を書いた想像:

public static int square(int x) { 
    pow(x, 2); 
    return x; 
} 

xの2乗を計算します。しかし、計算された正方形は何にも影響を及ぼさず、関数はxだけを返します。

if (i == 5){ 
    return i;   
} else { 
    something(i + 1); 
} 
return i; 

あなたのコードを注意深く見i5されていない場合、something(i + 1)が呼び出されます。それからいくつかの値を返しますが、この値は何にも影響しません。そして、incrementI関数はちょうどiを返します。あなたの場合は0です。

+0

何かがinrementI()、速いタイプミスであると思われます! – NightSkyCode

+0

@NightSkyCode、あなたはパベルのポイントが不足しているようです。あなたの最初の例の 'incrementI(i)'関数は常に 'i'を返します。' i == 5 'なら直ちに '5'を返し、それ以外の場合は' i'を返します。 「何か」が何であるかは関係ありません。あるものが 'something()'という関数呼び出しであるか、それが 'incrementI()'への再帰呼び出しであるかどうかは関係ありません。いずれにしても、それは何でも行い、何をしたのかの結果を無視してから、「i」を返します。 –

関連する問題