青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++分析研究  
C++
日歷
<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011
統計
  • 隨筆 - 92
  • 文章 - 4
  • 評論 - 4
  • 引用 - 0

導航

常用鏈接

留言簿

隨筆檔案

文章檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

 

  遞歸算法也是C語言算法中一個比較簡單與常用的算法,本文我們就來談談遞歸算法,我們首先了解一下什么是遞歸算法,關于遞歸算法的概念只有一句話:一個過程(或函數)直接或間接調用自己本身,這種過程(或函數)叫遞歸過程(或函數)
  我們再來看看遞歸算法的特點:
  (1) 遞歸就是在過程或函數里調用自身。
  (2) 在使用遞歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口。
  (3) 遞歸算法解題通常顯得很簡潔,但遞歸算法解題的運行效率較低。所以一般不提倡用遞歸算法設計程序。
  (4) 在遞歸調用的過程當中系統為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數過多容易造成棧溢出等。所以一般不提倡用遞歸算法設計程序。
  再看看遞歸的分類:
  直接遞歸
  程序設計中,過程或函數直接或者間接調用自己,就被稱為遞歸調用。子程序直接調用自己,這稱為直接遞歸;嵌套關系的子程序A和B,內層的B調用外層的A,這是間接低歸;平級關系的子程序A和B,其中A調用了B,B調用了A,這也是間接遞歸,不過,這種間接遞歸用到了"超前引用"的規則。
  下面,博主找到了一些有關于遞歸算法的題目。我們看看第一個題目。
  這是一道很經典的題目:階乘。相信大部分的人都知道什么是階乘,但是你如果不知道的話,不妨參見一下百度百科:階乘。
  好了,其實這題非常簡單,我們只需要一個函數即可解決問題。
  1 int recursive(int i)
  2 {
  3 int sum = 0;
  4 if (0 == i)
  5 return (1);
  6 else
  7 sum = i * recursive(i-1);
  8 return sum;
  9 }
  就是上面的遞歸函數,這題我就不浪費篇幅講解了,重點放在第二個例題:漢諾塔問題。
  一個廟里有三個柱子,第一個有64個盤子,從上往下盤子越來越大。要求廟里的老和尚把這64個盤子全部移動到第三個柱子上。移動的時候始終只能小盤子壓著大盤子。而且每次只能移動一個。1、此時老和尚(后面我們叫他第一個和尚)覺得很難,所以他想:要是有一個人能把前63個盤子先移動到第二個柱子上,我再把最后一個盤子直接移動到第三個柱子,再讓那個人把剛才的前63個盤子從第二個柱子上移動到第三個柱子上,我的任務就完成了,簡單。所以他找了比他年輕的和尚(后面我們叫他第二個和尚),命令:
  ① 你把前63個盤子移動到第二柱子上托福答案
  ② 然后我自己把第64個盤子移動到第三個柱子上后
  ③ 你把前63個盤子移動到第三柱子上
  2、第二個和尚接了任務,也覺得很難,所以他也和第一個和尚一樣想:要是有一個人能把前62個盤子先移動到第三個柱子上,我再把最后一個盤子直接移動到第二個柱子,再讓那個人把剛才的前62個盤子從第三個柱子上移動到第三個柱子上,我的任務就完成了,簡單。所以他也找了比他年輕的和尚(后面我們叫他第三和尚),命令:
  ① 你把前62個盤子移動到第三柱子上
  ② 然后我自己把第63個盤子移動到第二個柱子上后
  ③ 你把前62個盤子移動到第二柱子上
  3、第三個和尚接了任務,又把移動前61個盤子的任務依葫蘆話瓢的交給了第四個和尚,等等遞推下去,直到把任務交給了第64個和尚為止(估計第64個和尚很郁悶,沒機會也命令下別人,因為到他這里盤子已經只有一個了)。
  4、到此任務下交完成,到各司其職完成的時候了。完成回推了:
  第64個和尚移動第1個盤子,把它移開,然后第63個和尚移動他給自己分配的第2個盤子。
  第64個和尚再把第1個盤子移動到第2個盤子上。到這里第64個和尚的任務完成,第63個和尚完成了第62個和尚交給他的任務的第一步。
  從上面可以看出,只有第64個和尚的任務完成了,第63個和尚的任務才能完成,只有第2個和尚----第64個和尚的任務完成后,第1個和尚的任務才能完成。這是一個典型的遞歸問題。 現在我們以有3個盤子來分析:
  第1個和尚命令:
  ① 第2個和尚你先把第一柱子前2個盤子移動到第二柱子。(借助第三個柱子)
  ② 第1個和尚我自己把第一柱子最后的盤子移動到第三柱子。
  ③ 第2個和尚你把前2個盤子從第二柱子移動到第三柱子。
  很顯然,第二步很容易實現托福答案
  其中第一步,第2個和尚他有2個盤子,他就命令:
  ① 第3個和尚你把第一柱子第1個盤子移動到第三柱子。(借助第二柱子)
  ② 第2個和尚我自己把第一柱子第2個盤子移動到第二柱子上。
  ③ 第3個和尚你把第1個盤子從第三柱子移動到第二柱子。
  同樣,第二步很容易實現,但第3個和尚他只需要移動1個盤子,所以他也不用在下派任務了。(注意:這就是停止遞歸的條件,也叫邊界值)
  第三步可以分解為,第2個和尚還是有2個盤子,命令:
  ① 第3個和尚你把第二柱子上的第1個盤子移動到第一柱子。
  ② 第2個和尚我把第2個盤子從第二柱子移動到第三柱子。
  ③ 第3個和尚你把第一柱子上的盤子移動到第三柱子。
  分析組合起來就是:1→3 1→2 3→2 借助第三個柱子移動到第二個柱子 |1→3 | 2→1 2→3 1→3借助第一個柱子移動到第三個柱子|共需要七步。
  如果是4個盤子,則第一個和尚的命令中第1步和第3步各有3個盤子,所以各需要7步,共14步,再加上第1個和尚的1步,所以4個盤子總共需要移動7+1+7=15步,同樣,5個盤子需要15+1+15=31步,6個盤子需要31+1+31=64步……由此可以知道,移動n個盤子需要(2的n次方)-1步。
  從上面整體綜合分析可知把n個盤子從1座(相當第一柱子)移到3座(相當第三柱子):
  (1)把1座上(n-1)個盤子借助3座移到2座。
  (2)把1座上第n個盤子移動3座。
  (3)把2座上(n-1)個盤子借助1座移動3座。
  下面用hanoi(n,a,b,c)表示把1座n個盤子借助2座移動到3座。
  很明顯: (1)步上是 hanoi(n-1,1,3,2) (3)步上是 hanoi(n-1,2,1,3)

  用C語言表示出來,就是:
  1 #include <stdio.h>
  2 int method(int n,char a, char b)
  3 {
  4 printf("number%dform%cto%c"n",n,a,b);
  5 return 0;
  6 }
  7 int hanoi(int n,char a,char b,char c)
  8 {
  9 if( n==1 ) move (1,a,c);
  10 else
  11 {
  12 hanoi(n-1,a,c,b);
  13 move(n,a,c);
  14 hanoi(n-1,b,a,c);
  15 };
  16 return 0;
  17 }
  18 int main()
  19 {
  20 int num;
  21 scanf("%d",&num);
  22 hanoi(num,'A','B','C');
  23 return 0;
  24 }
  這就是遞歸算法,其實,在C語言中,遞歸算法比枚舉法還要實用,但是這兩種算法都很簡單。

posted on 2014-05-30 09:53 HAOSOLA 閱讀(338) 評論(0)  編輯 收藏 引用
 
Copyright © HAOSOLA Powered by: 博客園 模板提供:滬江博客
PK10開獎 PK10開獎
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线欧美一区| 久久久久久久一区二区| 老司机成人在线视频| 国产亚洲福利社区一区| 欧美在线一二三| 一本在线高清不卡dvd| aⅴ色国产欧美| 一区二区电影免费观看| 欧美日韩在线一区| 欧美中文在线字幕| 久久精品成人欧美大片古装| 亚洲国产第一页| 亚洲六月丁香色婷婷综合久久| 欧美日韩精品久久久| 亚欧成人精品| 葵司免费一区二区三区四区五区| 亚洲精品黄色| 亚洲欧美日韩国产成人精品影院| 有码中文亚洲精品| 亚洲美女免费精品视频在线观看| 亚洲综合日韩| 国产精品一区二区在线| 9人人澡人人爽人人精品| 欧美日韩一区二区三区视频| 欧美中文字幕在线视频| 美女精品自拍一二三四| 亚洲天堂网站在线观看视频| 久久成人免费视频| 一区二区三区国产盗摄| 欧美一区二区三区在线观看视频| 亚洲美女视频在线观看| 欧美一站二站| 一区二区三区视频在线| 久久久av水蜜桃| 亚洲一区二区三区久久 | 伊伊综合在线| 一区二区激情小说| 精品999久久久| 欧美成人激情视频免费观看| 午夜精品国产更新| 久久综合网络一区二区| 欧美一级在线视频| 欧美激情1区2区| 另类尿喷潮videofree | 一区二区三区高清| 亚洲久色影视| 欧美 日韩 国产在线| 久久动漫亚洲| 国产精品一区在线播放| av成人免费在线观看| 亚洲欧洲午夜| 另类酷文…触手系列精品集v1小说| 久久国产精品毛片| 国产精品揄拍一区二区| 99精品视频一区二区三区| 亚洲国产清纯| 免费久久99精品国产自| 麻豆91精品91久久久的内涵| 国产欧美日韩专区发布| 亚洲欧美清纯在线制服| 性欧美xxxx视频在线观看| 国产精品久久久久婷婷| 亚洲视频视频在线| 亚洲欧美日韩一区二区三区在线| 欧美乱妇高清无乱码| 亚洲伦理中文字幕| 亚洲一区二区3| 国语自产精品视频在线看| 欧美一区二区视频97| 午夜亚洲福利在线老司机| 国产精品人人做人人爽人人添| 中文在线资源观看视频网站免费不卡| 国产精品99久久久久久久vr| 欧美日韩一区综合| 一区二区三区.www| 午夜一区二区三区在线观看| 国产欧美一区二区精品性色| 久久国产精品久久国产精品| 久久婷婷激情| 亚洲精品久久久久| 欧美三区在线观看| 亚洲午夜性刺激影院| 久久精品国语| 亚洲黄页一区| 国产精品xnxxcom| 久久av一区二区三区漫画| 免费亚洲视频| 亚洲视频福利| 好吊色欧美一区二区三区视频| 久热精品视频在线观看一区| 亚洲日本在线观看| 在线中文字幕不卡| 国产欧美日韩另类视频免费观看| 久久久不卡网国产精品一区| 亚洲激情在线观看| 欧美在线视频一区| 亚洲黄色免费电影| 国产精品久久久久久久久久三级| 久久国产精品久久久| 亚洲精品在线电影| 久久精品视频va| 日韩一区二区精品在线观看| 国产精品影视天天线| 美女黄色成人网| 性欧美大战久久久久久久免费观看| 欧美.www| 久久精品官网| 亚洲午夜在线观看| 亚洲国产另类 国产精品国产免费| 欧美视频一区二区三区…| 久久亚洲精品伦理| 亚洲欧美不卡| 一本久道久久综合中文字幕| 免费亚洲电影在线观看| 欧美一区二区三区四区夜夜大片| 日韩亚洲精品电影| 在线免费观看日韩欧美| 国产欧美一区二区三区久久人妖| 欧美精品国产精品| 久热国产精品视频| 久久成人羞羞网站| 亚洲欧美在线视频观看| 99re在线精品| 亚洲欧洲日本国产| 欧美国产精品中文字幕| 久久男人资源视频| 欧美在线首页| 欧美一区2区视频在线观看| 在线一区二区三区四区| 亚洲免费观看在线观看| 亚洲国产视频直播| 亚洲福利视频专区| 激情久久一区| 好吊日精品视频| 激情综合色丁香一区二区| 国产日韩欧美一区二区三区四区| 国产精品二区在线观看| 国产精品成人播放| 欧美日韩视频在线一区二区| 欧美片在线观看| 欧美日韩久久精品| 欧美成年人视频| 亚洲伦理精品| 日韩午夜电影| 一区二区高清| 亚洲视频精品在线| 亚洲一区二区在线| 午夜精品久久久| 久久国产主播| 蜜桃av一区二区在线观看| 裸体丰满少妇做受久久99精品| 巨乳诱惑日韩免费av| 欧美mv日韩mv国产网站app| 欧美激情视频在线播放| 亚洲欧洲日夜超级视频| 99riav1国产精品视频| 亚洲嫩草精品久久| 香港久久久电影| 久久久无码精品亚洲日韩按摩| 另类春色校园亚洲| 欧美精品在线观看播放| 国产精品久久久久久亚洲调教| 国产精品一卡二卡| 尤物精品在线| 亚洲社区在线观看| 久久国产精品久久久久久久久久 | 午夜精品一区二区三区在线播放 | 久久综合中文色婷婷| 亚洲第一狼人社区| 99pao成人国产永久免费视频| 亚洲一区二区不卡免费| 久久精品国产一区二区三区| 欧美大片91| 国产日韩欧美麻豆| 亚洲高清视频中文字幕| 亚洲香蕉伊综合在人在线视看| 久久黄色级2电影| 亚洲激情另类| 久久不见久久见免费视频1| 欧美激情第10页| 国产自产v一区二区三区c| 亚洲欧洲日韩综合二区| 欧美一二三视频| 亚洲国产精品久久人人爱蜜臀| 亚洲在线观看| 欧美激情视频在线播放| 国产一区二区三区四区五区美女| 亚洲美女av网站| 久久久久国产精品麻豆ai换脸| 亚洲三级性片| 久久综合成人精品亚洲另类欧美| 欧美性大战久久久久久久蜜臀| 在线观看国产精品淫| 亚洲欧美日韩另类| 亚洲精品乱码久久久久久黑人| 久久精品国产一区二区电影 | 国产一区二区高清不卡| 国产欧美日韩精品专区| 国产精品日韩欧美一区| 国产精品性做久久久久久|