河內塔是一個數學遊戲:有三個塔柱A、B、C,遊戲的目的就是將A塔柱的圓盤全數移到C塔柱

遊戲有幾個規則:
1. 一次只能搬移一個圓盤
2. 小圓盤可以移到大圓盤上面,大圓盤不可以移到小圓盤上面。

事實上,可以從河內塔移動次數中,發現這是有遞迴規則的。
以最小的圓盤 n 為例:
當圓盤總數為 1 時, n 移動了 1 次
當圓盤總數為 2 時, n 移動了 2 次
當圓盤總數為 3 時, n 移動了 4 次
當圓盤總數為 4 時, n 移動了 8 次

為了要讓大盤可以移出來到目的柱,當盤數越多,其他較小圓盤就必須先移到暫存柱(三柱其中一柱)
若有n個盤子,則移動完畢所需的次數為2^n - 1

Java

import java.util.Scanner;
public class HanoiTower
{
    public static void main(String args[]) {
        System.out.print("請輸入盤數:");
        Scanner s = new Scanner(System.in);
        hanoi(s.nextInt(), 'A', 'B', 'C');
    }

    public static void hanoi(int n, char start, char temp, char end) {
        if(n > 0){
            //將所有盤子移到暫存區
            hanoi(n - 1, start, end, temp);
            //將最後一個盤子移到目的區
            display(n, start, end);
            //把暫存區的盤子移回目的區
            hanoi(n - 1, temp, start, end);
        }
    }

    public static void display(int n, char start, char end) {
        System.out.println("Move ring " + n + " from " + start + " to " + end);
    }
}