国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

《C Primer Plus》讀書(shū)筆記——遞歸

2019-11-14 10:07:01
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

遞歸的原理

一個(gè)函數(shù)調(diào)用其本身,此調(diào)用過(guò)程為遞歸(recursion)。

遞歸的使用

舉個(gè)栗子:

/*用來(lái)測(cè)試UpAndDown函數(shù)的驅(qū)動(dòng)程序*/#include <stdio.h>void UpAndDown (int);int main(void){ UpAndDown(1); return 0;}void UpAndDown (int n){ 輸出如下:

輸出如下:

遞歸的基本原理

每級(jí)遞歸都使用其私有變量(如例子中的n)

每次函數(shù)調(diào)用都返回前一級(jí)(調(diào)用他那級(jí))遞歸

遞歸函數(shù)中,位于遞歸調(diào)用前的語(yǔ)句和各級(jí)被調(diào)函數(shù)具有相同執(zhí)行順序

遞歸函數(shù)中,位于遞歸調(diào)用后的語(yǔ)句和各級(jí)被調(diào)函數(shù)具有相反執(zhí)行順序

每級(jí)遞歸會(huì)從頭執(zhí)行而不是復(fù)制其函數(shù)代碼,所以一般可代替循環(huán)語(yǔ)句。

遞歸函數(shù)必須包含可以終止遞歸調(diào)用的語(yǔ)句(如if)。

尾遞歸

最簡(jiǎn)單的遞歸形式。

把遞歸調(diào)用語(yǔ)句放在函數(shù)結(jié)尾(return語(yǔ)句之前)。

舉個(gè)栗子: 計(jì)算n的階乘

long fact (int n) // 使用循環(huán)計(jì)算階乘,占內(nèi)存少,執(zhí)行快{ long ans; for(ans = 1; n>1; n--) ans *= n; return ans;}long rfact (int n) // 使用遞歸計(jì)算階乘,僅作尾遞歸展示、入門(mén){ long ans; if(n > 0) ans = n * rfact(n-1); else ans = 1; //1.零的階乘;2.結(jié)束遞歸。 return ans;}

遞歸和反向計(jì)算

將一個(gè)整數(shù)轉(zhuǎn)換成二進(jìn)制形式。

void ToBinary (unsigned long n) // 簡(jiǎn)單須存數(shù)組版遞歸{ int r; r = n % 2; if(n >= 2) ToBinary(n / 2); putchar('0' + r); //or: putchar(r ? '1' : '0') return;}

遞歸的優(yōu)缺點(diǎn)

優(yōu)點(diǎn)算法簡(jiǎn)單缺點(diǎn)占內(nèi)存,難于閱讀和維護(hù)

舉個(gè)栗子:斐波那契數(shù)列:第一、二個(gè)數(shù)字都是1,而后續(xù)的每個(gè)數(shù)字是其前兩個(gè)數(shù)字之和。1、1、2、3、5、8、13……

long Fibonacci (int n){ if(n > 2) return Fibonacci(n-1) + Fibonacci(n-2); else return 1;}

雙重遞歸。 致命弱點(diǎn):每級(jí)調(diào)用變量數(shù)以指數(shù)遞增!

Something interesting …

main( )也可以被自身遞歸調(diào)用或其他函數(shù)調(diào)用,盡管用得少。


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 吴桥县| 大港区| 伊宁县| 嘉定区| 泰顺县| 合阳县| 江油市| 鹿泉市| 修水县| 德州市| 阿荣旗| 灵璧县| 临潭县| 中江县| 深州市| 郯城县| 阿巴嘎旗| 密山市| 盐源县| 莱阳市| 瑞丽市| 大连市| 巴南区| 藁城市| 温宿县| 洱源县| 威海市| 明水县| 焦作市| 澜沧| 白朗县| 綦江县| 宜阳县| 登封市| 玉屏| 镇坪县| 辉南县| 若尔盖县| 紫云| 永宁县| 盖州市|