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

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

遞歸

2019-11-11 07:50:25
字體:
供稿:網(wǎng)友

基本遞歸

遞歸有兩個階段:遞推與回歸。

遞推:在遞推階段每一個遞歸調(diào)用通過進一步調(diào)用自己來記住這次遞歸過程。當其中有調(diào)用滿足終止條件時,遞推結(jié)束。

回歸:函數(shù)調(diào)用已逆序的方式回歸,直到最初調(diào)用的函數(shù)返回為止,此時遞歸過程結(jié)束。

基本上來說,一個程序由4個區(qū)域組成:代碼段、靜態(tài)數(shù)據(jù)區(qū)、堆與棧。代碼段包含程序運行時所執(zhí)行的機器指令。靜態(tài)數(shù)據(jù)區(qū)包含在程序生命周期都一直存在的數(shù)據(jù),不如全局變量和靜態(tài)局部變量。堆包含程序運行時動態(tài)分配的空間,比如malloc。棧包含函數(shù)調(diào)用的信息。如下圖所示:

這里寫圖片描述

下面是一個使用遞歸計算階乘的例子:

int fact(int n){ if (n < 0) { return 0; } else if (n == 0 || n == 1) { return 1; } else { return n * fact(n - 1); }}

尾遞歸

為了解決普通遞歸需要相當大的空間來保存函數(shù)信息,提出了尾遞歸的遞歸方式。

當遞歸調(diào)用是整個函數(shù)中最后執(zhí)行的語句且它的返回值不屬于表達式的一部分時,這個遞歸調(diào)用就是尾遞歸的。

當編譯器檢查到一個函數(shù)是尾遞歸的時候,它就會覆蓋當前活躍記錄而不是在棧中去創(chuàng)建一個新的,這樣就解決了普通遞歸函數(shù)占用棧空間過大的問題。

使用尾遞歸修改上面的列子:

int facttail(int n, int a){ if (n < 0) { return 0; } else if (n == 0 || n == 1) { return a; } else { return facttail(n - 1, n * a); }}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 扬州市| 蕲春县| 米林县| 阿拉善右旗| 东安县| 彰化县| 区。| 建昌县| 威远县| 安义县| 华蓥市| 尉犁县| 嘉黎县| 噶尔县| 四川省| 县级市| 晋州市| 玛沁县| 双桥区| 武强县| 温泉县| 宁乡县| 伊川县| 凉山| 鸡东县| 韶山市| 石门县| 宝丰县| 洛浦县| 密云县| 普兰店市| 无锡市| 枞阳县| 宜兴市| 高尔夫| 璧山县| 南充市| 保靖县| 璧山县| 保靖县| 岱山县|