遞迴實現hanoi塔問題演算法

2022-03-05 16:45:01 字數 633 閱讀 6495

三個塔座,x、y、z

x上有n個直徑大小各不相同從大到小依次編號為n的圓盤,

將x塔上的圓盤移到z塔,要求:

*每次只能移動乙個圓盤

*任何時候不能將較大的圓盤壓在較小的圓盤之上

演算法分析:

如果x塔上只有乙個圓盤,則直接移到z軸上即可

如果x塔上圓盤個數》1,先將x塔上的n-1個盤借助z塔依次挪到y塔上,將x塔上的n盤移到z塔上

以此類推,將y他上的n-2個盤借助z塔依次挪到x塔上,將y塔上的n-1盤移到z塔上

邊界條件  z塔的盤子數量=n

演算法:偽**

//將x塔上的n個盤子,從x移到z,用y做輔助

void  hannoi(int n ,char x,char y,char z)

if(n==1)

move(x,1,z);

}else

hannoi(n-1,x,z,y);//將x塔上的n-1個盤子移到y,z做輔助

move(x,n,z) ;  //將n從x移到z

hannio(n-1,y,x);//將y上n-1個圓盤移到z,x做輔助}}

遞迴 Hanoi塔問題

題目 hanoi塔問題,遊戲規則 1 每次只能移動乙隻圓盤 2 任何時候大圓盤不能壓在小圓盤之上 3 任何時候都不允許將圓盤放在三根立軸之外的任何地方。分析 遞迴的 base case 當只有乙個圓盤的時候,直接從圓盤所在的立軸移動到目標立軸,即完成。遞迴的 recursion rule 如圖所示,...

hanoi塔問題的遞迴實現

一 背景故事 二 問題描述 假設有x,y,z三座塔座。在塔座x上有n個直徑各不相同 依次從小到大的編號為1,2.n的圓盤。現要求將x座上的盤子移動到z上,移動要求如下 1 一次只能移動乙個盤子。2 盤子只能插在x,y,z的某個塔座上。3 任何時刻不能將較大的盤子壓在較小的盤子上。如何移動盤子呢?當只...

hanoi塔問題(遞迴問題)

hanoi塔問題是比較經典的遞迴問題,很多學生從大一開始學習c語言遞迴時都或許會碰到這個問題,但很多同學一開始都是一知半解的,現在我來領大家一起重新學習一下hanoi問題,讓我們一起對遞迴函式有更好的理解。設n為hanoi塔的盤子的數量。a,b,c是三根支柱,hanoi 函式要求將所有的盤從a借助b...