-8
我在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();
}
}
}
你面臨什麼問題明白嗎?你是否試圖追蹤該代碼? –
您必須提出具體的問題 –
跟蹤代碼是什麼意思?我無法理解,一行一行地發生了什麼。 因此,當firstmove.makemoves被調用時,是否立即通過創建一個新的Hanoi firstmove實例來重新開始? 還是繼續到System.out.format,然後河內secondmove,然後secondmove.makemoves(),在重新開始之前? –