漢諾塔問題求解(遞迴)

2021-09-13 12:56:08 字數 794 閱讀 7626

人工智慧,零基礎入門!

例項說明

漢諾塔問題的描述如下:有a、b和c 3跟柱子,在a上從下往上按照從小到大的順序放著64個圓盤,以b為中介,把盤子全部移動到c上。移動過程中,要求任意盤子的下面要麼沒有盤子,要麼只能有比它大的盤子。本例項將演示如何求解3階漢諾塔問題。

實現過程

新建乙個類hanoitower。在hanoitower類中定義了乙個movedish()方法,它使用遞迴演算法完成漢諾塔問題的求解;

hanoitower**如下:

public class hanoitower  else 

}public static void main(string args)

}

執行結果

從a 移動盤子1 號到c

從a 移動盤子2 號到b

從c 移動盤子1 號到b

從a 移動盤子3 號到c

從b 移動盤子1 號到a

從b 移動盤子2 號到c

從a 移動盤子1 號到c

技術要點

為了將n個盤子從a移動到c,需要先將第n個盤子上面的n-1個盤子移動到b上,這樣才能將第n個盤子移動到c上。同理,為了將第n-1個盤子從b移動到c上,需要將n-2個盤子移動到a上,這樣才能將第n-1個盤子移動到c上。通過遞迴就可以實現漢諾塔問題的求解。

遞迴求解漢諾塔問題

漢諾塔 漢諾塔 tower of hanoi 源於印度傳說中,大梵天創造世界時造了三根金鋼石柱子,其中一根柱子自底向上疊著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。遞迴的思路就是把問題簡化到更...

求解漢諾塔的遞迴問題

先上 void towersofhanoi int n,int x,int y,int z 這裡也分基礎部分和遞迴部分,但是這裡的基礎部分並不明顯,這裡的基礎部分就是當x上的碟數為1時,if裡面的第一和第三句 直接退出,只有第二句 會執行。這裡的第二句 就是基礎部分,然後老規矩迭代部分我們只需要考慮...

漢諾塔問題求解

漢諾塔問題求解 問題描述 a,b,c三個柱子,其中a插著n個盤子從上到下按照小到大放,嘗試以b盤子為中介,每次移一次,將a中的盤子從上到下按照小到大插 演算法 n個盤子全放在a上面,分為兩步走 將前面 n 1 個盤子全部放到b上面,然後將第n個盤子放到c中 這樣子b中就有 n 1 個盤子,再以a為中...