3

これがJavaの再帰的静的メソッドです。

public static int mystery(int m, int n) {
    int result = 1;   

    if (m > 0) {
      result = n * mystery(m-1, n);
    }       

    System.out.println (m + "  " + result);
    return result;
}

メソッドをmystery(3,4)と呼ぶと、標準出力に何が出力されますか?mystery(3,4)の呼び出しからの最終的な戻り値は何でしょうか?

標準出力部の回答の説明は何ですか。

出力:

0 1
1 4
2 16
3 64

最終的な戻り値は64です。

4

4 に答える 4

5

固定されていると考えnて(すべての意図と目的のために)固定してf(m)くださいmystery(m,n)

それで

f(0) = 1
f(1) = n * f(0) = n
f(2) = n * f(1) = n * n
f(3) = n * f(2) = n * n * n

一般的なパターンがわかりますか?の閉じたフォームを提供できますf(n)か?

于 2012-05-01T17:06:21.130 に答える
2

あなたのコードを考えると

public static int mystery(int m, int n) {
int result = 1;   

if (m > 0) {
  result = n * mystery(m-1, n);
}       

System.out.println (m + "  " + result);
return result;
}

m = 3 と n = 4 から始めましょう。デバッガーになってエミュレートしてみましょう...

mystery(3,4){
   int result = 1
   if(3 > 0){
       result = 4 * mystery(3-1,4);
       //We proceed from this point only after evaluating mystery(2,4)
       mystery(2,4){
            int result = 1
            if(2 > 0){
                result = 4*mystery(2-1,4);
                //Now we have to evaluate mystery(1,4)
                mystery(1,4){
                    int result = 1;
                      if(1 > 0){
                          result = 4*mystery(1-1,4);
                          //Evaluate mystery(0,4)
                          mystery(0,4){
                             int result = 1;
                             if(0 > 0){
                                //Not evaluated
                             }
                             System.out.println(0 + " "+1);
                             return 1;
                          }...mystery(0,4) done continue with evaluation of mystery(1,4)
                          result = 4*1 //1 is what is returned by mystery(0,4)
                          System.out.println(1+ "" + 4);
                          return 4; 
                       }//done with the evaluation of mystery(1,4), resume evaluation of mystery(2,4)
                result = 4*4 //4 is the value returned by mystery(1,4)
                System.out.println(2 + " " + 16);
                return 16;            
                }//At this point we are done with evaluating (2,4) and on the way to resume evaluation of mystery(3,4)
       result = 4 * 16
       System.out.println(3 + " "+ 64)
       return 64;
       }
   }

お役に立てれば

于 2012-05-01T17:29:05.820 に答える
1

このサンプルでは、​​m の n 乗を計算します。したがって、あなたの場合、値は 64 です。

しかし、あなたはそれを試してみて、あなたの側で分析をしましたか?

于 2012-05-01T17:16:39.360 に答える
0

最初の呼び出しは、mystery(3,4) で、mystery(2,4) が呼び出され、mystery(1,4) が呼び出され、mystery(0,4) が呼び出されます。この例では、基本ケースはミステリー (0,4) です。つまり、m > 0 は false と評価され、結果 = n*mystery(m-1,n) は実行されません (再帰はここで終了します)。基本ケースはコール スタックの一番上にあり、スタックの一番下はミステリー (3,4) です。コール スタックの上から下に向かって評価します…</p>

ここに画像の説明を入力

于 2014-01-14T21:20:57.743 に答える