亚洲欧洲国产欧美一区精品,激情五月亚洲色五月,最新精品国偷自产在线婷婷,欧美婷婷丁香五月天社区

      考試首頁(yè) | 考試用書(shū) | 培訓(xùn)課程 | 模擬考場(chǎng) | 考試論壇  
      全國(guó)  |             |          |          |          |          |         
        當(dāng)前位置:計(jì)算機(jī)等級(jí) > 二級(jí)考試 > C語(yǔ)言程序設(shè)計(jì) > C語(yǔ)言輔導(dǎo) > 文章內(nèi)容
        

      全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言入門(mén)教程(75)

      中華IT學(xué)院   【 】  [ 2016年2月19日 ]
      程序中給出的函數(shù)ff是一個(gè)遞歸函數(shù)。主函數(shù)調(diào)用ff 后即進(jìn)入函數(shù)ff執(zhí)行,如果n<0,n==0或n=1時(shí)都將結(jié)束
      函數(shù)的執(zhí)行,否則就遞歸調(diào)用ff函數(shù)自身。由于每次遞歸調(diào)用的實(shí)參為n-1,即把n-1 的值賦予形參n,最后當(dāng)n-1
      的值為1時(shí)再作遞歸調(diào)用,形參 n的值也為1,將使遞歸終止。然后可逐層退回。下面我們?cè)倥e例說(shuō)明該過(guò)程。設(shè)執(zhí)
      行本程序時(shí)輸入為5, 即求 5!。在主函數(shù)中的調(diào)用語(yǔ)句即為y=ff(5),進(jìn)入ff函數(shù)后,由于n=5,不等于0或1,故
      應(yīng)執(zhí)行f=ff(n-1)*n,即f=ff(5-1)*5。該語(yǔ)句對(duì)ff作遞歸調(diào)用即ff(4)。 逐次遞歸展開(kāi)如圖5.3所示。進(jìn)行四次遞
      歸調(diào)用后,ff函數(shù)形參取得的值變?yōu)?1,故不再繼續(xù)遞歸調(diào)用而開(kāi)始逐層返回主調(diào)函數(shù)。ff(1)的函數(shù)返回值為1, ff(2)
      的返回值為 1*2=2,ff(3)的返回值為 2*3=6,ff(4) 的返
      回值為 6*4=24,最后返回值 ff(5)為 24*5=120。

      例5. 9也可以不用遞歸的方法來(lái)完成。如可以用遞推法,即從1開(kāi)始乘以2,再乘以3…直到n。遞推法比遞歸
      法更容易理解和實(shí)現(xiàn)。但是有些問(wèn)題則只能用遞歸算法才能實(shí)現(xiàn)。典型的問(wèn)題是 Hanoi塔問(wèn)題。

      [例 5.10]Hanoi塔問(wèn)題
      一塊板上有三根針,A,B,C。A針上套有 64個(gè)大小不等的圓盤(pán), 大的在下,小的在上。如圖 5.4所示。要把這 64
      個(gè)圓盤(pán)從A針移動(dòng) C針上,每次只能移動(dòng)一個(gè)圓盤(pán),移動(dòng)可以借助 B針進(jìn)行。但在任何時(shí)候,任何針上的圓盤(pán)都必須
      保持大盤(pán)在下,小盤(pán)在上。求移動(dòng)的步驟。
      本題算法分析如下,設(shè)A上有 n個(gè)盤(pán)子。
      如果n=1,則將圓盤(pán)從A直接移動(dòng)到 C。
      如果n=2,則:

      1.將 A上的n-1(等于 1)個(gè)圓盤(pán)移到B上;
      2.再將A上的一個(gè)圓盤(pán)移到 C上;
      3.最后將 B上的 n-1(等于 1)個(gè)圓盤(pán)移到C上。
      如果n=3,則:
      A. 將 A上的n-1(等于2,令其為 n`)個(gè)圓盤(pán)移到B(借助于 C),
      步驟如下:
      (1)將A上的n`-1(等于1)個(gè)圓盤(pán)移到 C上,見(jiàn)圖5.5(b)。
      (2)將A上的一個(gè)圓盤(pán)移到B,見(jiàn)圖 5.5(c)
      (3)將C上的n`-1(等于1)個(gè)圓盤(pán)移到B,見(jiàn)圖 5.5(d)
      B. 將A上的一個(gè)圓盤(pán)移到C,見(jiàn)圖5.5(e)
      C. 將 B上的n-1(等于2,令其為 n`)個(gè)圓盤(pán)移到C(借助 A),
      步驟如下:
      (1)將B上的n`-1(等于1)個(gè)圓盤(pán)移到A,見(jiàn)圖 5.5(f)
      (2)將B上的一個(gè)盤(pán)子移到C,見(jiàn)圖 5.5(g)
      (3)將A上的n`-1(等于1)個(gè)圓盤(pán)移到C,見(jiàn)圖5.5(h)。
      到此,完成了三個(gè)圓盤(pán)的移動(dòng)過(guò)程。
      從上面分析可以看出,當(dāng) n大于等于2時(shí), 移動(dòng)的過(guò)程可分解為
      三個(gè)步驟:
      第一步 把A上的n-1個(gè)圓盤(pán)移到B上;
      第二步 把A上的一個(gè)圓盤(pán)移到C上;
      第三步 把B上的n-1個(gè)圓盤(pán)移到C上;其中第一步和第三步是類(lèi)同的。
      當(dāng)n=3時(shí),第一步和第三步又分解為類(lèi)同的三步,即把n`-1個(gè)圓盤(pán)從一個(gè)針移到另一個(gè)針上,這里的n`=n-1。顯然
      這是一個(gè)遞歸過(guò)
      程,據(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 - 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');

      }

      分享到:
      本文糾錯(cuò)】【告訴好友】【打印此文】【返回頂部
      將考試網(wǎng)添加到收藏夾 | 每次上網(wǎng)自動(dòng)訪問(wèn)考試網(wǎng) | 復(fù)制本頁(yè)地址,傳給QQ/MSN上的好友 | 申請(qǐng)鏈接 | 意見(jiàn)留言 TOP
      關(guān)于本站  網(wǎng)站聲明  廣告服務(wù)  聯(lián)系方式  站內(nèi)導(dǎo)航  考試論壇
      Copyright © 2006-2017 中華考試網(wǎng)(Examw.com) All Rights Reserved  營(yíng)業(yè)執(zhí)照