c語(yǔ)言中怎么用遞歸法求漢諾塔

小億
85
2024-06-11 13:40:38

漢諾塔問(wèn)題是一個(gè)經(jīng)典的遞歸問(wèn)題,可以使用遞歸方法來(lái)求解。下面是一個(gè)使用C語(yǔ)言編寫(xiě)的求解漢諾塔問(wèn)題的程序示例:

#include <stdio.h>

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

int main() {
    int num_disks = 3; // 漢諾塔的盤(pán)數(shù)
    hanoi(num_disks, 'A', 'C', 'B'); // 將num_disks個(gè)盤(pán)子從A桿移動(dòng)到C桿
    return 0;
}

在上面的代碼中,hanoi函數(shù)使用遞歸的方式來(lái)解決漢諾塔問(wèn)題。參數(shù)n表示盤(pán)子的數(shù)量,from_rod、to_rodaux_rod分別表示三根柱子的標(biāo)識(shí)(A、B、C)。在每一次遞歸調(diào)用中,首先將n-1個(gè)盤(pán)子從起始柱子移動(dòng)到輔助柱子,然后將第n個(gè)盤(pán)子從起始柱子移動(dòng)到目標(biāo)柱子,最后將n-1個(gè)盤(pán)子從輔助柱子移動(dòng)到目標(biāo)柱子。通過(guò)遞歸調(diào)用,可以實(shí)現(xiàn)將所有盤(pán)子從起始柱子移到目標(biāo)柱子的操作。

0