1. 程式人生 > >漢諾塔遞迴實現——Java程式碼

漢諾塔遞迴實現——Java程式碼

在遞迴中不斷重複以下步驟: 若要將N層從X轉移到Z,則需要將N-1層從X轉移到Y,再將第N層從X轉移到Z,最後將N-1層從Y轉移到Z;將N層從從X轉移到Y、Y轉移到Z、Y轉移到X、Z轉移到X、Z轉移到Y也類似。 返回條件:N == 1時,第N層直接轉移到Z。(從X轉移到Z情況)

import java.util.Scanner;

public class HanoiTower 
{
    private int steps = 0; //完成遊戲需要的最少步數
    public HanoiTower(){}

    public int getSteps(){
        return
steps; } /* public int getSteps(int num){ int steps; if(num == 1){ steps = 1; return steps; } steps = 2*this.getSteps(num-1)+1; return steps; } */ public void printXToZ(int num){ if(num == 1){ System.out
.print(num + "->Z "); steps++; return; } printXToY(num - 1); System.out.print(num + "->Z "); steps++; printYToZ(num - 1); } public void printYToZ(int num){ if(num == 1){ System.out.print(num + "->Z "
); steps++; return; } printYToX(num - 1); System.out.print(num + "->Z "); steps++; printXToZ(num - 1); } public void printYToX(int num){ if(num == 1){ System.out.print(num + "->x "); steps++; return; } printYToZ(num - 1); System.out.print(num + "->x "); steps++; printZToX(num - 1); } public void printZToX(int num){ if(num == 1){ System.out.print(num + "->x "); steps++; return; } printZToY(num - 1); System.out.print(num + "->x "); steps++; printYToX(num - 1); } public void printXToY(int num){ if(num == 1){ System.out.print(num + "->y "); steps++; return; } printXToZ(num - 1); System.out.print(num + "->y "); steps++; printZToY(num - 1); } public void printZToY(int num){ if(num == 1){ System.out.print(num + "->y "); steps++; return; } printZToX(num - 1); System.out.print(num + "->y "); steps++; printXToY(num - 1); } public static void main(String[] args) { int num;//漢諾塔層數 Scanner scanner = new Scanner(System.in); System.out.println("Please input the floors of HanoiTower:"); num = scanner.nextInt(); HanoiTower hanoiTower = new HanoiTower(); hanoiTower.printXToZ(num);//將漢諾塔從X位置移到Z位置 System.out.println(); System.out.println("Steps:" + hanoiTower.getSteps()); } }