理解这种递归方法

时间:2012-11-20 17:35:56

标签: java recursion

我在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();
        }
    }
}

2 个答案:

答案 0 :(得分: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之后,该方法用val-1调用自身,直到值变为0。

呼叫层次结构如下:

recurse( 3 )
  recurse( 2 )
    recurse( 1 )
      recurse( 0 ) // break condition
      return        // val == 0
    return          // val == 1
  return            // val == 2
return              // val == 3

答案 1 :(得分:0)

如何通过按顺序遍历二叉树来完成此工作。检查wiki