999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

C語言中遞歸的分析及應用

2020-10-09 10:24:29楊新宇蘭全祥
電腦知識與技術 2020年22期
關鍵詞:應用

楊新宇 蘭全祥

摘要:函數以及函數的遞歸調用是學習C語言必須要掌握的內容,且遞歸作為經典的算法思想被廣泛應用于程序設計中。從應用場景的角度出發,對C語言中遞歸的定義、特征以及適用場景進行了探討,并對這些適用場景進行分析和舉例。最后,分析并探討了遞歸的優缺點,并給出了遞歸的優化方法和將遞歸轉換為非遞歸的方法。

關鍵詞:C語言;遞歸;應用;非遞歸化

中圖分類號:TP311 文獻標識碼:A

文章編號:1009-3044(2020)22-0237-02

開放科學(資源服務)標識碼(0SID):

1 背景

隨著時代的進步以及計算機編程語言的不斷發展,從20世紀80年代傳承至今的C語言始終是各大高校首選的計算機編程語言。世界編程語言排行榜( TIOBE)中C語言的熱門程度自2002年至今始終穩居前三[1]。由此可見,C語言的重要程度以及熱門度。另外,模塊化設計是所有程序設計必須遵循的設計原則,而函數就是C語言模塊化的重要組成部分[2]。C語言函數以及函數的使用是學習C語言必須要掌握的內容。遞歸作為經典的函數使用方法,應用范圍廣泛,是函數中不可或缺的重要內容,也是作為一個開發者應該掌握的重要算法之一。

2 遞歸的概述

2.1 定義

張長海等人認為在定義一個函數時,若在定義函數的內部又出現對函數本身的調用,則稱該函數是遞歸的或遞歸定義的[3];譚浩強等人認為遞歸就是函數自己直接或間接地調用自身的過程[4];丁雪晶認為遞歸就是把要解決的問題分解成與原問題有相同解法,且規模較小的問題,直到遇見終止條件[5]。綜上,筆者認為函數的遞歸就是直接或間接地調用自身進行人棧操作,遇到邊界之后再進行出棧的過程,且在人棧過程中,由原始問題分解為的子問題始終向邊界靠攏。

2.2 特征

從上述定義可得出遞歸的以下特征:

1)函數總是直接或者間接的調用自身;

2)函數的遞歸必須有結束條件(即問題的邊界),且在調用的過程中始終向某一個邊界靠近;

3)遞歸過程是一個不斷人棧和出棧的過程。

2.3 應用場景

遞歸的本質是將關于n的問題轉化為同類解法的關于m的問題,其中n和m是問題的規模,且m比n更靠近問題的邊界(遞歸結束條件)。

通過對常見遞歸應用的分析,筆者將遞歸應用場景分為三類:

1)數據的初始化是遞歸的。

2)數據的結構是遞歸的。

3)問題的求解是遞歸的。

3 遞歸的案例

根據上述對函數遞歸的定義、特征以及應用場景的總結,本文對上述遞歸的應用場景進行分析和舉例。

3.1 數據的初始化是遞歸的

示例:Fibonacci數列(兔子數列)

描述:形如1,1,2,3,5,8,13,21I.….的數列被稱為Fibonac-Cl數列,即第n個數等于第n-l個數和第n-2個數之和。

分析:根據上述定義,對數列進行數學歸納可得出數學遞推公式。

根據分析可知,Fibonacci數列是典型的數據的初始化是遞歸的例子,即要對n進行初始化,必須知道n-l和n-2的值。

初始化Fibonacci數列的關鍵代碼如下:

int Fib(int n){

if(n ==1¨n==2){return 1;)

elsef

return Fib(n-I)+Fib(n-2);

3.2 數據的結構是遞歸的

示例:二叉樹

描述:二叉樹是結點的有限集合,該集合或者為空集,或者是由一個根和兩棵互不相交的稱為該根的左子樹和右子樹的二叉樹組成[6]。

分析:由定義可知,一個根結點可能存在左子樹和右子樹,且左子樹和右子樹又是一顆更小的二叉樹。

因此,二叉樹從數據結構上來看是遞歸的,如圖1所示,A的左子樹、A的右子樹以及C的左子樹都是一顆二叉樹,且無論是二叉樹的初始化還是遍歷都能用遞歸來解決。

構造二叉樹的關鍵代碼如下:

typedef struct BiTNode{char data; struct BiTNode,*rchild,*rchild;}BiTNode,a:BiTree;

void CreateBiTree(BiTiree *T){

char c;scanf(”%c”,&c);

i“c==7#7){*T=NULL;】

elsef

*T= (BiTNode*)new BiTNode;

(*T)->data=c;

CreateBiTree(&(*T)->lchild);

CreateBiTree(&(*T)->rchild);

由代碼可以看出,在二叉樹的構造中,輸入根節點數據之后還需要遞歸調用CreateBiTree函數對其左右子樹進行構造,即要成功構造一顆二叉樹,需要先構造出其左、右子樹。另外,二叉樹的遍歷也可采用遞歸的方法實現先序遍歷、中序遍歷與后序遍歷。

3.3 問題的求解是遞歸的

示例:漢諾塔

描述:現有A,B,C三根柱子,在A柱有n個從上到下面積依次增大的盤子,現在想把A柱這n個盤子移動到C柱,但規定每一次只能移動一個盤子,且三根柱子的盤子始終都保持著面積大的盤子在下,面積小的盤子在上,問盤子移動的步驟。

猜你喜歡
應用
配網自動化技術的應用探討
科技視界(2016年21期)2016-10-17 19:54:47
帶壓堵漏技術在檢修中的應用
科技視界(2016年21期)2016-10-17 19:54:05
行列式的性質及若干應用
科技視界(2016年21期)2016-10-17 18:46:46
癌癥擴散和治療研究中的微分方程模型
科技視界(2016年21期)2016-10-17 18:37:58
紅外線測溫儀在汽車診斷中的應用
科技視界(2016年21期)2016-10-17 18:28:05
多媒體技術在小學語文教學中的應用研究
考試周刊(2016年76期)2016-10-09 08:45:44
微課的翻轉課堂在英語教學中的應用研究
大學教育(2016年9期)2016-10-09 08:28:55
分析膜技術及其在電廠水處理中的應用
科技視界(2016年20期)2016-09-29 14:22:00
GM(1,1)白化微分優化方程預測模型建模過程應用分析
科技視界(2016年20期)2016-09-29 12:03:12
煤礦井下坑道鉆機人機工程學應用分析
科技視界(2016年20期)2016-09-29 11:47:01
主站蜘蛛池模板: 2018日日摸夜夜添狠狠躁| 欧美精品一区二区三区中文字幕| 青草精品视频| 国产成人久视频免费| 亚洲无码高清免费视频亚洲| 免费人成在线观看成人片| 久久青草精品一区二区三区| 91色在线观看| 亚洲三级影院| 亚洲三级成人| 欧美午夜精品| 国产成人乱码一区二区三区在线| 一级黄色片网| 一级成人a毛片免费播放| 五月婷婷综合网| 国产激情在线视频| 亚卅精品无码久久毛片乌克兰 | 看av免费毛片手机播放| www.91中文字幕| 亚洲国产精品日韩av专区| 中文字幕欧美成人免费| 国产在线欧美| 欧美区日韩区| 狠狠做深爱婷婷综合一区| 99青青青精品视频在线| 一本色道久久88综合日韩精品| 91精品国产一区| 精品欧美一区二区三区在线| 亚洲va视频| 欧美精品v| 亚洲日本中文字幕天堂网| 制服丝袜无码每日更新| 自偷自拍三级全三级视频| www.99精品视频在线播放| 国产97公开成人免费视频| 久久性视频| 一本久道热中字伊人| 999精品视频在线| 久久精品国产亚洲麻豆| 999精品色在线观看| 国产无码精品在线播放| 无码精品一区二区久久久| 国产9191精品免费观看| 高清久久精品亚洲日韩Av| 浮力影院国产第一页| 老色鬼欧美精品| 九色综合视频网| 国产精品亚洲片在线va| 国内精品九九久久久精品| 99re在线观看视频| 免费xxxxx在线观看网站| AV在线天堂进入| 国产黑丝视频在线观看| www.精品视频| 色偷偷综合网| 呦女精品网站| 婷婷伊人五月| 在线观看国产精品一区| 一区二区午夜| 草逼视频国产| 亚洲三级a| 久久6免费视频| 色老头综合网| 美女无遮挡免费视频网站| 午夜欧美在线| 精品福利国产| 亚洲无码视频喷水| 91精品专区国产盗摄| 国产精品丝袜视频| 日韩高清一区 | 人人91人人澡人人妻人人爽| 57pao国产成视频免费播放 | 国产精品视频免费网站| 人妻少妇久久久久久97人妻| AV无码无在线观看免费| 在线观看热码亚洲av每日更新| 免费啪啪网址| 日韩一级二级三级| 91破解版在线亚洲| 国产欧美精品专区一区二区| 美女毛片在线| 国产精品亚洲五月天高清|