漢諾塔問題這樣看,應該簡單很多


 

參考鏈接

漢諾塔問題描述

漢諾塔:漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞着64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。

  • 用遞歸解決問題,一個關鍵點是要有遞歸結束的條件
  • 當只有一個盤子的時候,直接就是A->C,這也是遞歸結束的條件
  • 當有兩個盤子的時候,我們知道需要這樣移動,A->B, A->C, B->C。
  • 當有三個或三個以上的盤子的時候,我們這樣來考慮把最下面的盤子當做一塊,其他盤子當做一塊,那么,就簡化成了上一步。A柱子是源,B柱子是當做臨時轉換用的源,C是目的
  • 需要注意的是,當經過上一步后,除了最下面的盤子其他的已經到了B柱子上了,這個時候,A柱子就是當做臨時轉換用的了,B柱子是源,C是目的。所以當n不等於1的時候,會回調兩次函數,第一次參數的順序是n,a,c,b。第二次是n,b,a,c

c語言代碼實現漢諾塔問題

void move(int n, char a, char b, char c) { if(n==1) { printf("%c-->%c\n", a,c); } else {//要移動第n塊盤子,需要建立在n-1塊的基礎上 move(n-1, a, c, b);//a移動到b printf("%c-->%c\n", a, c); move(n-1, b, a, c);//上面的最后一段話 } } int main(void) { move(3, 'a', 'b', 'c'); }

python代碼實現漢諾塔問題

def move(n, a, b, c): if(n==1): print(a+"-->"+c) else: move(n-1, a, c, b) print(a+"-->"+c) move(n-1, b, a, c) move(3, 'a', 'b', 'c')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM