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

淺析遞歸函數在C++語言中的實現

2012-10-25 06:55:24陳穎鑫李主國
湖北開放大學學報 2012年9期
關鍵詞:定義語言

陳穎鑫,李主國

(1.中南財經政法大學,湖北 武漢 430073;2.湖北廣播電視大學,湖北 武漢 430073)

淺析遞歸函數在C++語言中的實現

1陳穎鑫,2李主國

(1.中南財經政法大學,湖北 武漢 430073;2.湖北廣播電視大學,湖北 武漢 430073)

本文結合生活實際探討了遞歸函數的概念,并舉例說明了遞歸函數的具體編寫方法,研究了遞歸的調用機制,最后總結了遞歸函數的利弊,提出要適當地使用遞歸思想的原則。

遞歸;函數;程序設計;C++語言

1 .引言

如果定義一個概念或事物需要用到這個概念或事物本身,我們稱它的定義是遞歸的(Recursive)。例如,下面這個故事:

從前有座山,山上有座廟,廟里有個老和尚,正在給小和尚講故事!故事是什么呢?“從前有座山,山上有座廟,廟里有個老和尚,正在給小和尚講故事呢!故事是什么呢?‘從前有座山,山上有座廟,廟里有個老和尚,正在給小和尚講故事呢!故事是什么呢?……’”

當聽到這個故事,一般人都會感覺到無聊之極。然而,數學上確實需要這種“無聊”呢,例如,有很多概念是用它自己來定義的,像n的階乘是這樣定義的:n的階乘等于n乘以n-1的階乘。如果這樣就算定義完了,恐怕跟上面那個故事有異曲同工之妙了:n-1的階乘是什么?是n-1乘以n-2的階乘。那n-2的階乘又是什么?這樣下去,永無休止了。因此,需要定義一個最關鍵的基礎條件:0的階乘等于1。

實質上,遞歸函數使用的是數學歸納法的理念,即初始條件和遞推兩者不可或缺。遞歸,是函數實現的一個很重要的環節或者方法,很多程序都或多或少的使用了遞歸函數。遞歸的意思就是函數自己調用自己本身,或者在調用的下級函數中調用自己,不管是直接調用,還是間接調用。

2 .遞歸函數編程

把上面的階乘定義用C++語言來實現,可以寫成這樣:

從程序可以看到,我們采用遞歸函數的方法編程的時候,只需要把初始條件和遞推兩者表達清楚,基本上就可以完成任務了。計算機會根據你的合理設計,自行完成遞歸的算法過程。

不妨再來看幾個問題:

A)Fibonacci數列,它是這樣定義的:

①fib(1)=1

②fib(2)=1

(1)液質條件:Thermo Scientific LCQ液質聯用儀,XbridgeTM-C18色譜柱(250 mm×4.6 mm,5 μm);填充劑為十八烷基硅烷鍵合硅膠;流動相為乙腈-0.5%氨水溶液,等度洗脫(80∶20),體積流量0.5 mL/min;檢測波長235 nm;柱溫25 ℃;進樣量5 μL。ESI離子源,正離子檢出模式,掃描范圍m/z 95~800。

③fib(n)=fib(n-1)+fib(n-2)

用C++語言編程的實現:

B)使用輾轉相除法求兩個正整數a和b的最大公約數:

①如果a能被b整除,則最大公約數是b。

②否則,最大公約數等于b和a%b的最大公約數。(a%b表示a被b除的余數)

用C++語言編程的實現:

上面兩個問題看似毫不相干,它們之間卻有一個有意思的聯系(即Lamé定理):如果輾轉相除法需要k步來計算兩個數的最大公約數,那么這兩個數之中較小的一個必然大于等于Fibonacci數列的第k項。

C)猴子吃桃問題

猴子第一天摘下若干桃子,當即吃了一半,還不過癮,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩一個桃子了。試求第一天至少摘下多少桃子?

下面這個程序可以求出每天的桃子數目:

D)漢諾塔游戲

有三根柱子,在一根柱子上從下往上按照大小順序摞著n片黃金圓盤。需要把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。

使用C++語言可以這么實現:

上述若干問題均是以遞歸的形式描述的,所以很容易采用遞歸方法編程實現。從以上幾個問題的求解可以看出,凡使用遞歸解法,一定要設置好初始條件,再就是對遞歸過程的處理。初始條件是遞歸得以完成的終結條件,而遞歸過程則是將復雜問題逐步簡化為較簡單一點的問題,直到歸結為終結條件。

3 .遞歸程序的運行機制

遞歸之所以能實現,是因為函數的每個執行過程都在棧中有自己的形參和局部變量的拷貝,這些拷貝和函數的其他執行過程毫不相干。這種機制依靠棧來實現,它是當代大多數程序設計語言實現子程序結構的基礎。假定某個調用函數調用了一個被調用函數,再假定被調用函數又反過來調用了調用函數。這第二個調用就被稱為調用函數的遞歸,因為它發生在調用函數的當前執行過程運行完畢之前。而且,因為這個原先的調用函數、現在的被調用函數在棧中較低的位置有它獨立的一組參數和自變量,原先的參數和變量將不受影響,所以遞歸能正常工作。

程序員需保證遞歸函數不會隨意改變靜態變量和全局變量的值,以避免在遞歸下降過程中的上層函數出錯。程序員還必須確保有一個終止條件來結束遞歸下降過程,并且返回到頂層。

自己調用本身,這樣就是遞歸。那么有人可能會想,這不是死循環嗎?的確,如果不小心,很容易造成死循環。因此,在遞歸函數中,一定要保證遞歸得以下降為較簡單的問題,如果遞歸不能下降,函數將會形成死循環。

在某些場合,使用遞歸比使用循環要簡單得多。而且有些題目,一看就知道應該使用遞歸而不是循環來處理。相反,有些問題則不需要使用遞歸過程來解決。比如,階乘完全可以采用簡單的循環來處理:

程序如此改寫后,可以減小計算機系統的堆棧開銷,改善程序所使用的空間及運行效率。

4 .結論

遞歸,在數學和計算機科學中都是一種重要的求解問題的方法。遞歸程序設計思想是計算機編程思想中分治思想的典型代表。很多看似復雜或者難于理清頭緒的問題使用遞歸方法能以簡單易懂的形式一下子得到解決。

但是,凡事有利必有弊,我們需要適當地使用遞歸函數,切不可盲目濫用。基于遞歸函數的運行機制,某些能夠采用循環的方法直接實現的過程,可以避免使用遞歸算法,以改善程序的運行效率。

[1] 譚浩強. C++程序設計[M]. 北京:清華大學出版社,2004.

[2] 鄭莉. C++語言程序設計[M]. 北京:清華大學出版社,2003.

[3] 黃欣陽,等. 如何用遞歸方法進行程序設計[J]. 福建電腦,2011,(6).

[4] 邵利平. 程序語言教學中的遞歸程序思維培養[J]. 電腦知識與技術,2011,(29).

Simple Analysis of the Realization of Recursive Function in C++ Language

CHEN Ying-xin, LI Zhu-guo

In this Paper, the concept of Recursive Function is studied combined with daily life. The way to program recursive functions is shown by samples, and its call mechanism is analyzed. The benefit and disadvantage of these functions are concluded, while the principle to use recursive thought properly is also proposed.

Recursion; Function; Programming; C++ Language

TP311.1

A

1008-7427(2012)09-0159-02

2012-05-04

猜你喜歡
定義語言
永遠不要用“起點”定義自己
海峽姐妹(2020年9期)2021-01-04 01:35:44
定義“風格”
語言是刀
文苑(2020年4期)2020-05-30 12:35:30
讓語言描寫搖曳多姿
多向度交往對語言磨蝕的補正之道
累積動態分析下的同聲傳譯語言壓縮
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
我有我語言
論語言的“得體”
語文知識(2014年10期)2014-02-28 22:00:56
修辭學的重大定義
當代修辭學(2014年3期)2014-01-21 02:30:44
主站蜘蛛池模板: 国内精品视频| 精品少妇人妻av无码久久| 亚洲第一区在线| 一本视频精品中文字幕| 乱人伦视频中文字幕在线| 久久久久国产精品熟女影院| 国产熟睡乱子伦视频网站| 国产精品xxx| 青青草国产一区二区三区| 91精品国产91久久久久久三级| 欧美日本不卡| 亚洲精品va| 91色在线观看| 国产成熟女人性满足视频| 国产女人爽到高潮的免费视频| 亚洲中文无码av永久伊人| 国产亚洲成AⅤ人片在线观看| 久久成人国产精品免费软件 | 国产激情第一页| 国产福利免费视频| 91色老久久精品偷偷蜜臀| 网久久综合| 成人午夜精品一级毛片| 中文字幕在线播放不卡| 午夜国产在线观看| 丰满人妻一区二区三区视频| 国产av剧情无码精品色午夜| 欧美人人干| 国产后式a一视频| 五月婷婷丁香综合| 九九久久精品国产av片囯产区| 亚洲国产欧美国产综合久久 | 91福利一区二区三区| 黄色不卡视频| 欧美一区精品| 欧美精品H在线播放| 无码久看视频| 免费大黄网站在线观看| 中文字幕亚洲乱码熟女1区2区| 国产AV无码专区亚洲精品网站| 67194亚洲无码| 国产成人精品一区二区三在线观看| 美女一区二区在线观看| 91尤物国产尤物福利在线| 成人在线观看不卡| 国产黄在线观看| 伊人久久大香线蕉aⅴ色| 夜夜拍夜夜爽| 国产女人综合久久精品视| 免费国产福利| 久爱午夜精品免费视频| 亚洲午夜福利在线| 青青青亚洲精品国产| 国产国语一级毛片| 色综合中文字幕| 丁香六月激情综合| 玩两个丰满老熟女久久网| 亚洲精品欧美重口| 亚洲精品日产AⅤ| 免费aa毛片| 国产av色站网站| 免费人成视网站在线不卡| 一本色道久久88| 在线观看无码av五月花| 高清码无在线看| 国产欧美自拍视频| 成人在线天堂| 亚洲精品不卡午夜精品| 欧美不卡在线视频| 大学生久久香蕉国产线观看| 国产白浆视频| 国产在线观看一区二区三区| 免费观看无遮挡www的小视频| 久久久久国产精品嫩草影院| 99热亚洲精品6码| 国产在线精品美女观看| 亚洲 成人国产| 99热亚洲精品6码| 蜜桃视频一区二区| 亚洲 成人国产| 色哟哟国产精品一区二区| 亚洲综合激情另类专区|