Basit bir örnek olarak A çubuğuna dizilmiş 2 tane disk düşünelim. Amacımız bu diskleri kurallara uymak kaydıyla B çubuğuna taşımak olsun. Öncelikle 1. disk A çubuğundan C çubuğuna alınır. Sonra 2. disk A çubuğundan B çubuğuna alınır. Son olarak C’deki 1. disk, B’deki 2. diskin üzerine yerleştirilir ve puzzle çözülmüş olur. Bu çözüm 3 adımda yapılmaktadır.
A çubuğunda ilk başta 3 disk olduğunu düşünürsek, 3. diski (yani en büyük olanı) açığa çıkarmamız gerekir. Bunun için 1. ve 2. diskler C çubuğuna aktarılır. Daha sonra 3. disk B çubuğuna yerleştirilir. Son olarak da sırasıyla 1. disk A çubuğuna, 2. disk B çubuğuna ve 1. disk B çubuğuna yerleştirilerek puzzle çözülmüş olur. Bu kez adım sayısı 3+1+3 = 7 olur.
A çubuğunda ilk başta 4 disk varsa, problemi recursive bir şekilde çözmek için aşağıdaki adımlar izlenir:
1) 1., 2. ve 3. diskler A çubuğundan C çubuğuna aktarılır.
2) 4. disk A çubuğundan B çubuğuna aktarılır.
3) C çubuğundaki diskler (1,2,3) B çubuğuna aktarılır.
4 disk olduğunda 7+1+7 = 15 adımda çözüm yapılmış olur. Elde ettiğimiz sonuçlardan yola çıkarak, Hanoi Kulesi algoritmasını bir fonksiyonda şu şekilde ifade edebiliriz:
void HanoiTower(int n, char from, char aux, char to) {
if(n == 1) {
cout << “Disk 1, ” << from << ” çubuğundan ” << to << ” çubuğuna hareket ettirilmiştir.” << endl;
return;
}
else {
HanoiTower(n-1, from, to, aux);
cout << n << ” Diski, ” << from << ” çubuğundan” << to << ” çubuğuna hareket ettirilmiştir.” << endl;
HanoiTower(n-1, aux, from, to);
}
}
Bu kodda n, disk sayısını; from, diskin harekete başladığı ilk çubuğu; to, diskin hedef çubuğunu; aux ise diğer çubuğu ifade etmektedir. Tek disk olması durumu ayrı bir if komutu içinde belirtilmiştir. Birden fazla disk olması durumunda ise kod, tek bir disk kalana kadar recursive bir şekilde çözüm yapmaktadır. Bu kodu main’de şu şekilde çalıştırabiliriz:
void main() {
clrscr();
int n;
cout << “\n*****Hanoi Kulesi*****\n”;
cout << “Disk sayısını giriniz: ” << endl;
cin >> n;
HanoiTower(n, ‘A’,’ B’, ‘C’);
getch();
}