-9

私たちはJavaクラスの紹介で再帰を学んでおり、与えられた例のメソッドがどのように機能するかを理解するのに苦労しています。メソッドが呼び出されるとどうなりますか?

コードは次のとおりです。

public class Hanoi

    private int n;
    private int pegA;
    private int pegB;

    public Hanoi(int in_n, int in_pegA, int in_pegB)
    {
        n = in_n;
        pegA = in_pegA;
        pegB = in_pegB;
    }

    public void makemoves()
    {
        if (n==1)
            System.out.format("%d ==> %d%n", pegA, pegB)
        else
        { 
             int otherPeg = 6 - pegA - pegB; // 1 + 2 + 3 =6
             Hanoi firstmove = new Hanoi (n-1, pegA, otherPeg);
             firstmove.makemoves();
             System.out.format("%d ==> %d%n", pegA, pegB);
             Hanoi secondmove = new Hanoi (n-1, otherPeg, pegB);
             secondmove.makemoves();
        }
    }
}
4

2 に答える 2

1

再帰は、それ自体を呼び出すメソッドであり、ブレーク条件をテストします。これは、基本的な概念を説明するための非常に簡単な例です。

static void recurse( int val ) {
    if ( val == 0 ) {
        return; // returns from last invocation
    }
    System.out.println("val=" + val );
    recurse( val - 1 );
    return; // here the method returns to previous invocation (or initial call from main)
}


public static void main( String[] args) {
    recurse( 3 );
}

最初の呼び出し recurse( 3 ) はメソッドを呼び出し、3 != 0 であることをテストした後、メソッドは値が 0 になるまで val - 1 でそれ自体を呼び出します。

呼び出し階層は次のようになります。

recurse( 3 )
  recurse( 2 )
    recurse( 1 )
      recurse( 0 ) // break condition
      return        // val == 0
    return          // val == 1
  return            // val == 2
return              // val == 3
于 2012-11-20T18:10:29.563 に答える