漢諾塔,如何用迴圈寫 20

2025-05-13 01:40:50 字數 2411 閱讀 9751

漢諾塔程式設計問題!

1樓:

漢諾塔問題就是乙個繞口令,只要你掌握了遞迴知識,對照解題思路,你多繞幾次就會繞出來了。

2樓:網友

漢諾塔問題是乙個經典遞迴問題,首先要理解漢諾塔問題的實質,就是重複的按順序的移動disk,寫程式並不難,難在理解。上段程式很麻煩,不是乙個漂亮的程式。單步執行的話不如自己做乙個模型,按照程式的實現自己一步一步的按程式做下來就差不多理解了。

我當初也是這樣做的。這個問題的關鍵在於遞迴函式呼叫是的引數變化,不同的disk情況對應不同的引數,引數的變化規律是迴圈變化,三為乙個週期,左迴圈,這樣調換引數位置,而不改變移動實現方法,這樣來實現disk的移動。這樣即節省**又節省資源開銷,這才是遞迴程式的精髓。

3樓:清影星河

正確的程式應該這樣寫。

void hanoi( int n,char one ,char two,char three)

else }

解釋:將 n 個塔牌從 one 經過 two 全部移動到 three否則}

通過 n=3 來跟蹤,會好理解些,下面就是執行過程的,// 後面會用{}來,不要怕難,使用文字縮排,跟蹤讀下去:

hanoi(3, one, two,three)move( one, two);

hanoi( 1, three, one, two);

move( one, three);

hanoi( 2, two, one, three);

move( one, two);

hanoi( 1, one, two, three);}

遞迴演算法 漢諾塔 演示

4樓:網友

定義函式movedisc( n,fromneedle,toneedle,usingneedle)。將 fromneedle 杆上的 n 個圓盤,藉助 usingneedle 杆,移動到 toneedle 杆上。

移動n個圓盤的遞迴演算法描述如下:

movedisc ( n,fromneedle,toneedle,usingneedle )

下面是程式。

int i=0; /* 移動圓盤數量計數器 */

main( )

movedisc ( n, fromneedle, toneedle, usingneedle )

unsigned n;

char fromneedle, toneedle, usingneedle;}

5樓:網友

不急的話,週末給你寫乙個。

漢諾塔問題看不懂,有人能幫一下我嗎?看不懂那個過程,或者告訴我怎麼去想這個問題。

6樓:匿名使用者

我在校那時也不明白,後來想,等以後用到的時候在學吧。

後來工作之後發現,我竟然從沒用過遞迴。

有的時候是執行環境不支援,微控制器類的跑起來容易爆棧,或者編譯器直接就報錯。

如何呼叫庫,或者自己寫乙個庫,快速完成需求。

如何寫乙個良好的介面。

如何寫出層次清晰,功能完善的**。

如何寫出後期維護起來更容易的**。

以上這些事情反而成為了我工作中的主要內容。

我並沒有答題,關於遞迴我也自認肯定沒有其它幾位答主答的更好。

我只是在講,題主如果現在不理解,也不必強求。程式設計還有很多更好玩的東西。

7樓:賣蘿莉的店長

想要把方塊從a柱子移到c柱子,需要b柱子作為媒介,比如說,乙個方塊可以直接放到c上,但是兩個方塊就不行了,要先把小的那塊放在b柱子上,然後將第二塊方塊從a柱子移到c柱子上,再將第一塊方塊移到c柱子上,從2塊方塊開始,以後有n塊方塊,就必須要將n-1塊方塊放在b柱子上,第n塊方塊移到c上,再將n-1塊方塊移到c上。而對於n-1塊方塊,又有n-2塊方塊需要移到a或者c上,這樣第n-1塊方塊才能移到b上。核心公式就是f(n)=2^n-1次。

碼字不易,不知幫到您了沒有。

8樓:匿名使用者

假如有a,b,c三根杆,一開始全部圈在a杆,目的用漢諾塔規則藉助c杆將所有圈從a轉移到c。

乙個圈(1):1(a->b)1次。

兩個圈):1(a->c)(1次),2(a->b),1(a->c),共3次。

三個圈(a->c)(3次),3(a->b(a->c)(3次),共7次。

以此類推,假設n代表圈圈個數,z為總次數,則有:

z(n)=z(n-1)+1+z(n-1)=2*z(n-1)+1z(3)=z(2)+1+z(2)=2*3+1=7遞迴:z(3)=2*z(2)+1=2*(2*z(1)+1)+1=7

9樓:江南客棧愛發呆

趙薇演過乙個電影叫《天地英雄》,我是看了那部電影,然後明白了遞迴的含義。

c語言漢諾塔問題,C語言漢諾塔問題

關於漢諾塔這個東西是相當的抽象,我當時學習的時候看了好幾個版本的教程,也沒有搞懂,最後還是自己反覆的理解,頓悟了,所以我這裡把當時我作為初學者的想法寫給你,但是最重要的還得靠你自己的理解 1 對於void hanoi int n,char one char two,char three 這個函式,表...

c語言漢諾塔程式,C語言漢諾塔程式

將以下內容全部複製到新建的原始檔中 本人自己寫的,因為你那課本上的 沒解釋,書寫不規範,很難理解清楚,所以我直接新寫了一個完整的 附帶詳細說明 include 漢諾塔x層塔從a塔整體搬到c塔,中間臨時b塔。x層塔是從大到小往上疊放。每次移動只能移動一層塔。並且在移動過程中必須保證小層在上邊 藉助b塔...

漢諾塔問題的漢語詳細解釋,漢諾塔問題的漢語詳細解釋

漢諾塔問題 問題 首先去掉原來的神話色彩 神廟 僧侶和世界末日,來到問題的數學本質。有a b c三根柱子。a上堆放了n個盤子,每個盤子都比它下面的盤子小一些。現在要把盤子全部搬到c上去,條件是每次只能搬動一個盤子,而且任何時候都不能放在比它小的盤子上面 顯然,必須用到b作為中轉 怎麼搬動這些盤子呢?...