日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【C/C++】递归算法

發(fā)布時(shí)間:2025/3/15 c/c++ 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C/C++】递归算法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  所謂遞歸——函數(shù)的遞歸調(diào)用。c語言的這種特性給程序設(shè)計(jì)帶來許多方便。尤其是接觸數(shù)據(jù)結(jié)構(gòu)時(shí),會(huì)發(fā)現(xiàn)遞歸的出現(xiàn)頻率非常之高,也行之有效~下面是筆者在接觸遞歸這個(gè)東西時(shí)的一些個(gè)人總結(jié)和體會(huì):

  1.直接或間接地調(diào)用函數(shù)本身。我們?cè)诔绦蛟O(shè)計(jì)時(shí),往往要自己寫一些函數(shù)來幫助整個(gè)解決方案的完成,有時(shí)一個(gè)函數(shù)中又要調(diào)用自身來幫助這個(gè)功能的實(shí)現(xiàn)。是不是被套話弄暈了?Don‘t worry~開個(gè)玩笑了。  

  2.一個(gè)簡單的例子可以幫助理解遞歸——求階乘。請(qǐng)看:

  n!=n*(n-1)!(n>=1);

    =1 ? ? ? ? ? ? ? ? (n=0);

這是求階乘的公式。我們顯然可以寫一個(gè)子函數(shù)來求n!(記這個(gè)函數(shù)是fac),可是注意到,求n!,我就要求(n-1)!。那么問題來了,求(n-1)! 所用到的函數(shù)不還是我們寫的這個(gè)fac函數(shù)嗎?

So,我們只要再次調(diào)用本身就ok了。下面給出子函數(shù):

  int fac(int n)

  {

    int f;

    if(n<o) printf("error!");

    else if(n==0) f=1;

    else f=n*fac(n-1);

    return f;

  }

  看似好像不比循環(huán)簡潔,可是,當(dāng)寫復(fù)雜一點(diǎn)的代碼時(shí),遞歸的優(yōu)點(diǎn)就顯露出來了。

  3.Execu me?不斷調(diào)用,何其盡也?

  可以看到,上面的程序并不是一個(gè)死循環(huán)~原因就在于這句if(n==0) f=1;這就是遞歸的終止條件。

  總結(jié):一個(gè)完整的遞歸應(yīng)該有兩個(gè)必要條件:1.終止條件。2.規(guī)模漸小。

  規(guī)模,又可以看做上面程序的n,他顯然是漸小的。

  4.遞歸的兩個(gè)分類

  1) 基于數(shù)學(xué)公式(如階乘);

  2) 基于語義(難!);請(qǐng)看下面這個(gè)狗血的問題:

  5.Hanoi塔問題。

  可以概述為下面的描述:

具體代碼如下:

輸入3個(gè)時(shí)是這樣的:

?

?

?需要多久呢?n個(gè)盤子需要移動(dòng)2^64-1次,假設(shè)一秒一次,需要多久呢?

?

?

——————答案是約600億年!

?

哈哈,等你移完了,世界末日就到了~~~~可是計(jì)算機(jī)卻幫我們實(shí)現(xiàn)了這一功能~~真心感到計(jì)算機(jī)的強(qiáng)大~~~~

?

  

轉(zhuǎn)載于:https://www.cnblogs.com/duye/p/6075712.html

新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的【C/C++】递归算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。