汉诺塔问题在 C 语言中的实现

汉诺塔问题是一种经典的计算机科学问题,通常用作递归算法的示例。在这个问题中,有三个塔和一定数量的圆盘,每个圆盘的大小不同。目标是将所有圆盘从一个塔移动到另一个塔,每次只能移动一个圆盘,并且较大的圆盘不能放在较小的圆盘之上。

C 语言实现的汉诺塔问题通常使用递归函数。递归函数会调用自身,并将问题分解成较小的子问题,直到可以轻松解决。以下是 C 语言实现的汉诺塔问题的代码示例:

#include 

// 递归函数,将 n 个圆盘从塔 A 移动到塔 C
void hanoi(int n, char from, char to, char aux)
{
    if (n == 1) {
        printf("将圆盘 %d 从 %c 移动到 %c
", n, from, to);
    } else {
        // 将 n-1 个圆盘从 A 移动到 B
        hanoi(n - 1, from, aux, to);

        // 将最大的圆盘从 A 移动到 C
        printf("将圆盘 %d 从 %c 移动到 %c
", n, from, to);

        // 将 n-1 个圆盘从 B 移动到 C
        hanoi(n - 1, aux, to, from);
    }
}

int main()
{
    int n; // 圆盘数量

    printf("输入圆盘数量:");
    scanf("%d", &n);

    hanoi(n, 'A', 'C', 'B'); // 将 n 个圆盘从塔 A 移动到塔 C

    return 0;
}
pdf 文件大小:143.51KB