漢諾塔問(wèn)題是一個(gè)經(jīng)典的遞歸問(wèn)題,可以使用遞歸方法來(lái)求解。下面是一個(gè)使用C語(yǔ)言編寫(xiě)的求解漢諾塔問(wèn)題的程序示例:
#include <stdio.h>
void hanoi(int n, char from_rod, char to_rod, char aux_rod) {
if (n == 1) {
printf("Move disk 1 from rod %c to rod %c\n", from_rod, to_rod);
return;
}
hanoi(n-1, from_rod, aux_rod, to_rod);
printf("Move disk %d from rod %c to rod %c\n", n, from_rod, to_rod);
hanoi(n-1, aux_rod, to_rod, from_rod);
}
int main() {
int num_disks = 3; // 漢諾塔的盤(pán)數(shù)
hanoi(num_disks, 'A', 'C', 'B'); // 將num_disks個(gè)盤(pán)子從A桿移動(dòng)到C桿
return 0;
}
在上面的代碼中,hanoi
函數(shù)使用遞歸的方式來(lái)解決漢諾塔問(wèn)題。參數(shù)n
表示盤(pán)子的數(shù)量,from_rod
、to_rod
和aux_rod
分別表示三根柱子的標(biāo)識(shí)(A、B、C)。在每一次遞歸調(diào)用中,首先將n-1
個(gè)盤(pán)子從起始柱子移動(dòng)到輔助柱子,然后將第n
個(gè)盤(pán)子從起始柱子移動(dòng)到目標(biāo)柱子,最后將n-1
個(gè)盤(pán)子從輔助柱子移動(dòng)到目標(biāo)柱子。通過(guò)遞歸調(diào)用,可以實(shí)現(xiàn)將所有盤(pán)子從起始柱子移到目標(biāo)柱子的操作。