遞迴思想解決漢諾塔的問題
阿新 • • 發佈:2019-01-06
【解決思路】
以3個塔柱為例
鐵柱x 鐵柱y 鐵柱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; }