1

プログラムは「5」の結果を表示しますが、「結果の謎(n/20) + 1」を進める「+1」のため、その答えにたどり着く方法がわかりません。

コンピューターがこれを取得するためにとる論理的な手順を教えてくれる人はいますか?

    public class Experimental{

    public static int mystery(int n){   
        if (n <= 0) { return 0; }   
        return mystery(n / 2) + 1;
        }//ends method

public static void main(String[] args){
    System.out.println(mystery(20));
}//ends method
}//ends class
4

2 に答える 2

1

これは再帰呼び出しです。n がゼロに等しくなったときに終了します (負になることはありません)。ゼロに到達するには、2 で 5 除算する必要があります。あなたにとって最善の方法は、一枚の紙を取り、これがどのように展開するかを見ることです.

mystery(20/2) + 1 =
(mystery(20/2/2) + 1) + 1 =
((mystery(20/2/2/2) + 1) + 1) + 1 = 
(((mystery(20/2/2/2/2) + 1) + 1) + 1) + 1 = 
((((mystery(20/2/2/2/2/2) + 1) + 1) + 1) + 1) + 1 =
0 + 1 + 1 + 1 + 1 + 1 = 5

お役に立てれば。コンピューターは人間よりも再帰がはるかに優れています...

于 2013-03-14T21:34:05.357 に答える
0

はい!gdb実際、 can youなどのデバッガーを使用すると、コンピューターが実行する論理的な手順を実行できます。

  1. -gフラグを付けてプログラムをコンパイルします。
  2. 実行gdb a.out(またはプログラム名)。
  3. gdb cheatsheetブレークポイントを設定してコードをステップ実行する方法については、Googleを参照してください。
于 2013-03-14T21:21:52.507 に答える