首頁(yè)考試吧論壇Exam8視線考試商城網(wǎng)絡(luò)課程模擬考試考友錄實(shí)用文檔求職招聘論文下載
2013中考
法律碩士
2013高考
MBA考試
2013考研
MPA考試
在職研
中科院
考研培訓(xùn) 自學(xué)考試 成人高考
四 六 級(jí)
GRE考試
攻碩英語(yǔ)
零起點(diǎn)日語(yǔ)
職稱英語(yǔ)
口譯筆譯
申碩英語(yǔ)
零起點(diǎn)韓語(yǔ)
商務(wù)英語(yǔ)
日語(yǔ)等級(jí)
GMAT考試
公共英語(yǔ)
職稱日語(yǔ)
新概念英語(yǔ)
專四專八
博思考試
零起點(diǎn)英語(yǔ)
托?荚
托業(yè)考試
零起點(diǎn)法語(yǔ)
雅思考試
成人英語(yǔ)三級(jí)
零起點(diǎn)德語(yǔ)
等級(jí)考試
華為認(rèn)證
水平考試
Java認(rèn)證
職稱計(jì)算機(jī) 微軟認(rèn)證 思科認(rèn)證 Oracle認(rèn)證 Linux認(rèn)證
公 務(wù) 員
導(dǎo)游考試
物 流 師
出版資格
單 證 員
報(bào) 關(guān) 員
外 銷 員
價(jià)格鑒證
網(wǎng)絡(luò)編輯
駕 駛 員
報(bào)檢員
法律顧問
管理咨詢
企業(yè)培訓(xùn)
社會(huì)工作者
銀行從業(yè)
教師資格
營(yíng)養(yǎng)師
保險(xiǎn)從業(yè)
普 通 話
證券從業(yè)
跟 單 員
秘書資格
電子商務(wù)
期貨考試
國(guó)際商務(wù)
心理咨詢
營(yíng) 銷 師
司法考試
國(guó)際貨運(yùn)代理人
人力資源管理師
廣告師職業(yè)水平
衛(wèi)生資格 執(zhí)業(yè)醫(yī)師 執(zhí)業(yè)藥師 執(zhí)業(yè)護(hù)士
會(huì)計(jì)從業(yè)資格
基金從業(yè)資格
統(tǒng)計(jì)從業(yè)資格
經(jīng)濟(jì)師
精算師
統(tǒng)計(jì)師
會(huì)計(jì)職稱
法律顧問
ACCA考試
注冊(cè)會(huì)計(jì)師
資產(chǎn)評(píng)估師
審計(jì)師考試
高級(jí)會(huì)計(jì)師
注冊(cè)稅務(wù)師
國(guó)際內(nèi)審師
理財(cái)規(guī)劃師
美國(guó)注冊(cè)會(huì)計(jì)師
一級(jí)建造師
安全工程師
設(shè)備監(jiān)理師
公路監(jiān)理師
公路造價(jià)師
二級(jí)建造師
招標(biāo)師考試
物業(yè)管理師
電氣工程師
建筑師考試
造價(jià)工程師
注冊(cè)測(cè)繪師
質(zhì)量工程師
巖土工程師
造價(jià)員考試
注冊(cè)計(jì)量師
環(huán)保工程師
化工工程師
咨詢工程師
結(jié)構(gòu)工程師
城市規(guī)劃師
材料員考試
監(jiān)理工程師
房地產(chǎn)估價(jià)
土地估價(jià)師
安全評(píng)價(jià)師
房地產(chǎn)經(jīng)紀(jì)人
投資項(xiàng)目管理師
環(huán)境影響評(píng)價(jià)師
土地登記代理人
繽紛校園 實(shí)用文檔 英語(yǔ)學(xué)習(xí) 作文大全 求職招聘 論文下載 訪談|游戲
軟件水平考試
軟件水平考試資訊
軟件水平考試試題
軟件水平考試專項(xiàng)輔導(dǎo)
軟件水平考試交流互動(dòng)
軟件水平考試交流互動(dòng)
您現(xiàn)在的位置: 考試吧 > 軟件水平考試 > 復(fù)習(xí)資料 > 程序員資料 > 正文

C語(yǔ)言初學(xué)者入門知識(shí)之函數(shù)03

  本題算法分析如下,設(shè)A上有n個(gè)盤子。

  如果n=1,則將圓盤從A直接移動(dòng)到C。

  如果n=2,則:

  1.將A上的n-1(等于1)個(gè)圓盤移到B上;

  2.再將A上的一個(gè)圓盤移到C上;

  3.最后將B上的n-1(等于1)個(gè)圓盤移到C上。

  如果n=3,則:

  A. 將A上的n-1(等于2,令其為n`)個(gè)圓盤移到B(借助于C),

  步驟如下:

  (1)將A上的n`-1(等于1)個(gè)圓盤移到C上,見圖5.5(b)。

  (2)將A上的一個(gè)圓盤移到B,見圖5.5(c)

  (3)將C上的n`-1(等于1)個(gè)圓盤移到B,見圖5.5(d)

  B. 將A上的一個(gè)圓盤移到C,見圖5.5(e)

  C. 將B上的n-1(等于2,令其為n`)個(gè)圓盤移到C(借助A),

  步驟如下:

  (1)將B上的n`-1(等于1)個(gè)圓盤移到A,見圖5.5(f)

  (2)將B上的一個(gè)盤子移到C,見圖5.5(g)

  (3)將A上的n`-1(等于1)個(gè)圓盤移到C,見圖5.5(h)。

  到此,完成了三個(gè)圓盤的移動(dòng)過程。

  從上面分析可以看出,當(dāng)n大于等于2時(shí), 移動(dòng)的過程可分解為三個(gè)步驟:

  第一步 把A上的n-1個(gè)圓盤移到B上;

  第二步 把A上的一個(gè)圓盤移到C上;

  第三步 把B上的n-1個(gè)圓盤移到C上;其中第一步和第三步是類同的。

  當(dāng)n=3時(shí),第一步和第三步又分解為類同的三步,即把n`-1個(gè)圓盤從一個(gè)針移到另一個(gè)針上,這里的n`=n-1。顯然這是一個(gè)遞歸過

  程,據(jù)此算法可編程如下:

  move(int n,int x,int y,int z)

  {

  if(n==1)

  printf("%c-->%c\n",x,z);

  else

  {

  move(n-1,x,z,y);

  printf("%c-->%c\n",x,z);

  move(n-1,y,x,z);

  }

  }

  main()

  {

  int h;

  printf("\ninput number:\n");

  scanf("%d",&h);

  printf("the step to moving %2d diskes:\n",h);

  move(h,'a','b','c');

  }

  move(int n,int x,int y,int z)

  {

  if(n==1)

  printf("%-->%c\n",x,z);

  else

  {

  move(n-1,x,z,y);

  printf("%c-->%c\n",x,z);

  move(n-1,y,x,z);

  }

  }

  main()

  { ……

  move(h,'a','b','c');

  }

  從程序中可以看出,move函數(shù)是一個(gè)遞歸函數(shù),它有四個(gè)形參n,x,y,zn表示圓盤數(shù),x,y,z分別表示三根針。move 函數(shù)的功能是把x上的n個(gè)圓盤移動(dòng)到z 上。當(dāng)n==1時(shí),直接把x上的圓盤移至z上,輸出x→z。如n!=1則分為三步:遞歸調(diào)用move函數(shù),把n-1個(gè)圓盤從x移到y(tǒng);輸出x→z;遞歸調(diào)用move函數(shù),把n-1個(gè)圓盤從y移到z。在遞歸調(diào)用過程中n=n-1,故n的值逐次遞減,最后n=1時(shí),終止遞歸,逐層返回。當(dāng)n=4 時(shí)程序運(yùn)行的結(jié)果為:

  input number:

  4

  the step to moving 4 diskes:

  a→b

  a→c

  b→c

  a→b

  c→a

  c→b

  a→b

  a→c

  b→c

  b→a

  c→a

  b→c

  a→b

  a→c

  b→c

  相關(guān)推薦:

  2012年軟考系統(tǒng)分析師考試60天完美復(fù)習(xí)計(jì)劃

  2012年軟件水平考試網(wǎng)絡(luò)工程師章節(jié)筆記講義匯總

  2012年上半年軟件水平考試成績(jī)查詢匯總

文章搜索
軟件水平考試欄目導(dǎo)航
版權(quán)聲明:如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系800@exam8.com,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請(qǐng)注明出處。