C 遞迴,漢諾塔

2021-08-11 20:31:47 字數 726 閱讀 7460

a為存放盤子的塔,b為目標塔,c為輔助塔 

演算法分為三步 

一、將a上n-1個盤子全部放到c塔上 

二、將a上剩下的乙個盤子放到b塔上 

三、將c塔上的盤子全部放到b塔上

注:不需要考慮如何移動n-1個盤子

遞迴過程: 

首先,將a上n-1個盤子放到c上,然後將a上剩下的乙個盤子放到b上,然後可以看成a為輔助塔,b為目標塔,c為放盤子的(b中有乙個最大的盤子,但任何盤子都能放到上面,所以可以看做為空),然後將c上n-2個盤子放到a上,剩下的地n-1個盤子放到b上,此時便完成了一次遞迴,然後不斷地重複上述過程即可

**

abc分別是123柱子,**思路大概是這樣的

把n-1層的環子先通過c移到b,最後再把第n層的最大的環子移到c,這個時候就剩下乙個n-1層的新「塔」,那麼我們把他看成乙個新的「塔」把b柱看成之前的a柱,通過c柱把(n-1)-1層移到a柱,再把第n-1層的最大(原本第二大)的環子放到c,如此迴圈最後n=1 就了解了。

[cpp] view plain copy print?

#includeusing namespace std;

void hanoi(int n,char a,char b,char c)

{ if(n==1)

cout<>n;

cout<<"結果為"<

漢諾塔 遞迴 c

1.遞迴終止條件 沒有安排好的盤子只剩乙個。此時將其從a,放到c 2.子問題 先將n 1個盤子從a經過中轉站c放到b,再將n 1個盤子從b經中轉站a放到c。3.cout的是從出發點到中轉站,n 1時cout從出發點到終點。輸入 盤子的數量n 輸出 每一步移動 輸入範例 2輸出範例 a b a c b...

漢諾塔 遞迴

個人理解遞迴函式的基本要求就是,函式中呼叫函式本身,滿足特定的條件後返回。include include include include include include include include include include include include include 標頭檔案引用的較多...

遞迴漢諾塔

遞迴問題 遞迴要有三個要素 1.遞迴結束條件 2.遞迴結束時的處理 3.抽取重複的邏輯,剝離外殼 重點都在這一步 漢諾塔問題 把圓盤從下面開始按大小順序重新擺放在另一根柱子上。且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。首先,要搞這個編碼得要知道漢諾塔的解題思路 1.把a塔上...