2012-03-13 5 views
-3

これは私が理解している問題を持っているコードです。私はこれまでこのコードがint aとint bに渡っていることを知っています。次に、int bが0に等しいかどうかをチェックし、そうである場合は1を返します。次にbが1かどうかをチェックし、1であればint aを返します。しかし、私はこのコードの最後の部分を得ることはできません。再帰との何かが、私はそれを得ることはありません。この再帰メソッドは何をしますか?

public static int mystery(int a, int b) { 
if(b == 0) { 
return 1; 
else if(b==1) { 
return a; 
return a * mystery(a,b-1); 
+2

問題を解決するために何をしましたか?まず自分の宿題を試してみてください。 –

+4

この宿題はありますか? – Perception

答えて

2

紙の上で実行して:

謎(10、20)

B == 0(偽)のb == 1(偽)が返さ10 *謎(10、19)

謎(10、19)

10 *謎(10、18)

などを返すために帰着します。

ミステリー(20,10)ミステリー(5,5);

3

このコードは、累乗ではaがベースで、bが指数です。したがって、b = 0の場合、明らかに、解答はべき乗の規則によって1になります。 b = 1の場合、a^1 = aであるため、return aとなります。それ以外の場合は、乗算を使用して、再帰の基本ケースがb = 1b = 0の条件は、b > 0の場合は条件になりません)を再帰的に取得します。ちなみに、コンパイルするには適切な括弧をコードに置く必要があります(中括弧は閉じておく必要があります)。結果として

即ち、

public static int mystery(int a, int b) { 
     if(b == 0) { 
      return 1; 
     } else if(b==1) { 
      return a; 
     } 
     return a * mystery(a,b-1); 
    } 

例えば、

mystery(2, 6)戻る64。

+0

誰かの宿題を彼らのためにする –

+1

なぜそれほど深刻なの?明るく! –