1. 程式人生 > >遞迴思想解決漢諾塔的問題

遞迴思想解決漢諾塔的問題

【解決思路】

3個塔柱為例

鐵柱鐵柱鐵柱z 總共64個盤子

我們把所有的呃思路聚集為以下兩個問題:

問題1: X上的63個盤子藉助z移動到y

問題2: Y上的63個盤子接住X移動到Z

然後用這個方法遞迴----------------

問題1的圓盤移動步驟為

 -先將前62個盤子移動到z上,確保大盤在小盤下。

 -再將最底下的第63歌盤子移動到y上。

 -最後將z上的62個盤子移動到Y

問題2的圓盤的移動步驟為:

 -先將前62個盤子移動到z上,確保大盤在小盤下。

 -再將最底下的第63歌盤子移動到y上。

 -最後將z上的62個盤子移動到Y

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

【程式碼-C語言】

#include <stdio.h>


//引數:n移動動的個數 xyz分別代表三個鐵柱

void moveDish(int n,char x,char y,char z){

    
    if(1==n){
        printf("%c---->%c\n",x,z);
    }else{
    
        moveDish(n-1, x, z, y);  //將n-1個盤子藉助z從x移動到y上
        printf("%c---->%c\n",x,z); //將第n個盤子移動到z上
        moveDish(n-1, y, x, z);  //將n-1個盤子藉助x從y移動到z上

    }
}

int main(){

    int n ;
    printf("請輸入漢諾塔的層數");
    scanf("%d",&n);
    moveDish(n, 'X', 'Y', 'Z');
    
    return 0;
}