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