溫馨提示×

漢諾塔c語言遞歸算法怎么實現

小億
105
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
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女