java 漢諾塔問題 遞迴

2021-08-14 19:10:45 字數 737 閱讀 1461

stacks1=new stack();

stacks2=new stack();

stacks3=new stack();

s1.push(3);

s1.push(2);

s1.push(1);

run3(3,s1,s2,s3);

public static void run3(int size,stacks1,stacks2,stacks3)else

}

首先用三個棧代表 三根柱子,預設在s1中存三個值,3 2 1代表大小不同的三個鐵圈。

run3函式有四個引數,代表著,第乙個引數是int ,剩下三個引數是棧。代表移動size個鐵圈,從s1到s3上。

接著進行判斷

if(size==1)
如果正好是乙個的話,直接從s1中取出放入s3中即可,

else
如果不是乙個首先執行

run3(size-1,s1,s3,s2);

將上面size-1 個移動到s2上,再將

s3.push(s1.pop());
剩下的乙個移動到s3上。

最後再將s2當成源,s1當成中轉柱子,進行往s3移動的操作

run3(size-1,s2,s1,s3);

漢諾塔問題(遞迴)

題目描述 對於傳統的漢諾塔遊戲我們做乙個拓展,我們有從大到小放置的n個圓盤,開始時所有圓盤都放在左邊的柱子上,按照漢諾塔遊戲的要求我們要把所有的圓盤都移到右邊的柱子上,請實現乙個函式列印最優移動軌跡。給定乙個int n,表示有n個圓盤。請返回乙個string陣列,其中的元素依次為每次移動的描述。描述...

漢諾塔問題(遞迴)

問題 漢諾塔問題 解法 遞迴求解 思路 先把n 1從a移動b 在把第n個從a移到c 使用遞迴使得 變得簡單 複雜度 2的n次方 1 includeint step 1 void hanoi int level,char a,char b,char c 1 當盤子數大於1時,先把n 1個從a借助c移動...

漢諾塔問題(遞迴)

漢諾塔 在印度,有這麼乙個古老的傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,有三根柱子。印度教的主神梵天在創造世界的時候,在其中一根柱子上從下到上地穿好了由大到小的64片金盤,這就是所謂的漢諾塔。不論白天黑夜,總有乙個僧侶在按照下面的法則移動這些金盤 一次只移動一片,不管在哪根柱子上,小片必須在...