温馨提示×

汉诺塔c语言递归算法怎么实现

小亿
84
2024-06-11 13:38:35
栏目: 编程语言

汉诺塔问题是一个经典的递归问题,其解法如下:

#include <stdio.h>

void 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函数,可以解决任意数量的盘子的汉诺塔问题。

0