汉诺塔问题是一个经典的递归问题,其解法如下:
#includevoid move(int n, char a, char b, char c) { if (n == 1) { printf("Move disk 1 from %c to %c\n", a, c); } else { move(n - 1, a, c, b); printf("Move disk %d from %c to %c\n", n, a, c); move(n - 1, b, a, c); } } int main() { int n; printf("Enter the number of disks: "); scanf("%d", &n); move(n, 'A', 'B', 'C'); return 0; }
在上面的代码中,move函数是递归的关键,它接受四个参数:n表示当前要移动的盘子数量,a、b、c分别表示起始柱子、中间柱子和目标柱子。当n为1时,直接将盘子从起始柱子移动到目标柱子;当n大于1时,先将n-1个盘子从起始柱子移动到中间柱子,然后将第n个盘子从起始柱子移动到目标柱子,最后将n-1个盘子从中间柱子移动到目标柱子。
通过递归调用move函数,可以解决任意数量的盘子的汉诺塔问题。