1樓:匿名使用者
要看懂遞迴程式,往往應先從最簡單情況看起。
先看hanoi(1, one, two, three)的情況。這時直接將one柱上的一個盤子搬到three柱上。注意,這裡one柱或three柱到底是a、b還是c並不重要,要記住的是函式第二個引數代表的柱上的一個盤被搬到第四個引數代表的柱上。
為方便,將這個動作記為:
one =》three
再看hanoi(2, one, two, three)的情況。考慮到hanoi(1)的情況已經分析過了,可知這時實際上將產生三個動作,分別是:
one =》two
one =》three
two =》three
很顯然,這實際上相當於將one柱上的兩個盤直接搬到three柱上。
再看hanoi(3, one, two, three)的情況。分析
hanoi(2, one , three, two)
one =》three
hanoi(2, two, one, three)
即:先將one柱上的兩個盤搬到two柱上,再將one柱上的一個盤搬到three柱上,最後再將two柱上的兩個盤搬到three柱上。這不就等於將one柱上的三個盤直接搬到three柱上嗎?
運用歸納法可知,對任意n,
hanoi(n-1, one , three, two)
one =》three
hanoi(n-1, two, one, three)
就是先將one柱上的n-1個盤搬到two柱上,再將one柱上的一個盤搬到three柱上,最後再將two柱上的n-1個盤搬到three柱上。這就是我們所需要的結果!
2樓:次元說
漢諾塔問題怎麼解決,可以利用遞迴法來解決。設移動盤子數為n,為了將這n個盤子從a杆移動到c杆,可以以c盤為中介,從a杆將1至n-1號盤移至b杆。將a杆中剩下的第n號盤移至c杆。
以a杆為中介;從b杆將1至n-1號盤移至c杆。這樣漢諾塔問題就解決了
3樓:匿名使用者
首先你得知道原理:
n個漢諾塔問題可以轉換成:
1 先把n-1個塔從a搬到b.
2 把最下面的盤搬到c
3 把n-1個盤從b搬到c
上面的程式就是利用這個原理:
假若有4個盤子:
hanoi( 4, 'a', 'b', 'c' )
會執行:
4不等於1,所以執行else =>
hanoi( 4- 1, 'a', 'c', 'b' ); .....1
move( 'a','c' ); .....2
hanoi( 4 - 1, 'b','a', 'c' ); ......3
在執行第1句時,呼叫遞迴:
hanoi( 3, 'a', 'c', 'b' ); 這個又呼叫hanoi函式:
3不等於1,所以執行else =>
hanoi( 3- 1, 'a' ,'b','c' ); .....4
move( 'a','b'); .....5
hanoi( 3 - 1, 'c','a', 'b' ); ......6
在執行第4句時,呼叫遞迴:
hanoi( 2, 'a' ,'b','c' );這個又呼叫hanoi函式:
2不等於1,所以執行else =>
hanoi( 2- 1, 'a','c','b'); .....7
move( 'a','c'); .....8
hanoi( 2 - 1, 'b','a','c'); ......9
執行第7句時,呼叫遞迴:
hanoi( 1, 'a','c','b');這個又呼叫hanoi函式:
等於1,列印a-->b,此次呼叫完畢,轉到第8句,
列印a->c,再執行第9句:
hanoi( 1, 'b','a','c');
等於1,所以move(one,three),即b->c
注意,這時候又回到了第5句(因為第4句包含的7,8,9全部執行完了):b-a
依此類推...
漢諾塔c語言問題
4樓:匿名使用者
我初學時,也看不懂,主要是不理解遞迴思想,好好看看,你按著這個演算法用筆畫一下每個步驟後的結果,畫到最後就看出來是什麼回事了。
5樓:匿名使用者
hanoi(m,'a','b','c');這個演算法的目的就是將m個積木塊,從'a『柱經過'b'柱移到'c『柱上
給你照著**講吧。
void hanoi(int n,char one ,char two,char three)
}整個遞迴的過程你可以用n=2,n=3在腦力裡過一遍就應該沒有問題了。
他就是迴圈呼叫hanoi這個方法,直到n==1
6樓:匿名使用者
這個是遞迴的問題,不要跟蹤,注重邏輯。有問題再問
c 漢諾塔程式解釋,C 漢諾塔程式解釋
首先不看 理一下思路,漢諾塔解題步驟有三步 設a c 先將漢諾塔看成兩部分n 1,1 n 1在上面 第一 將a中的n 1個盤藉助c移到b hanoi n 1,a,c,b 第二 將a中的最下面的那一個移到c move a,c 第三 將b中的盤藉助a移到c.hanoi n 1,b,a,c 就是這樣,因為...
c語言hanoi塔問題程式中,c語言hanoi塔問題程式中hanoi n 1,one,three,two 的執行過程是怎麼的?
要看懂遞迴程式,往往應先從最簡單情況看起。先看hanoi 1,one,two,three 的情況。這時直接將one柱上的一個盤子搬到three柱上。注意,這裡one柱或three柱到底是a b還是c並不重要,要記住的是函式第二個引數代表的柱上的一個盤被搬到第四個引數代表的柱上。為方便,將這個動作記為...
c語言。金字塔,求解釋,C語言。金字塔 ,求解釋。
列印一行5顆星你會不?for i 1 i 5 i 迴圈列印5顆星列印下面這張圖你會不?5行5顆星 就是在上面的基礎上在來一個迴圈for j 1 j 5 j 外層迴圈for i 1 i 5 i 迴圈列印5顆星printf n 現在說你的圖 就是你給的那個,我不重複了。至於裡面的數量關係的規律,你可以從...