c語言怎么實(shí)現(xiàn)漢諾塔

小億
85
2024-01-13 19:52:03
欄目: 編程語言

C語言可以使用遞歸來實(shí)現(xiàn)漢諾塔問題。以下是一個(gè)實(shí)現(xiàn)的示例代碼:

#include <stdio.h>

void hanoi(int n, char from, char to, char aux) {
    if (n == 1) {
        printf("Move disk 1 from %c to %c\n", from, to);
        return;
    }
    hanoi(n - 1, from, aux, to);
    printf("Move disk %d from %c to %c\n", n, from, to);
    hanoi(n - 1, aux, to, from);
}

int main() {
    int n;
    printf("Enter the number of disks: ");
    scanf("%d", &n);
    hanoi(n, 'A', 'C', 'B');
    return 0;
}

該程序使用遞歸函數(shù)hanoi來實(shí)現(xiàn)漢諾塔。該函數(shù)接受四個(gè)參數(shù):n表示要移動(dòng)的盤子數(shù)目,from表示起始柱子,to表示目標(biāo)柱子,aux表示輔助柱子。

遞歸的終止條件是當(dāng)n等于1時(shí),直接將盤子從起始柱子移動(dòng)到目標(biāo)柱子。否則,先將n-1個(gè)盤子從起始柱子移動(dòng)到輔助柱子,然后將最后一個(gè)盤子從起始柱子移動(dòng)到目標(biāo)柱子,最后將n-1個(gè)盤子從輔助柱子移動(dòng)到目標(biāo)柱子。

main函數(shù)中,用戶輸入要移動(dòng)的盤子數(shù)目,然后調(diào)用hanoi函數(shù)來執(zhí)行移動(dòng)操作。

注意:以上代碼僅為示例,沒有進(jìn)行輸入驗(yàn)證和錯(cuò)誤處理。在實(shí)際應(yīng)用中,應(yīng)該考慮輸入的有效性和錯(cuò)誤情況的處理。

0