劉國慶 史小春
摘要:簡單來說遞歸指一個函數(shù)直接或間接調(diào)用自身的一種方法,通常通過它可以把復(fù)雜的大型的問題一層一層轉(zhuǎn)化為一個規(guī)模較小但與原來問題類似的問題來解決。
關(guān)鍵詞:遞歸循環(huán);程序
中圖分類號:TP301.6文獻(xiàn)標(biāo)識碼:A文章編號:1672-9129(2020)13-0193-01
如果把遞歸比喻成 “查字典 “,當(dāng)查一個字或詞時,發(fā)現(xiàn)其中解釋的某個詞不懂,繼續(xù)查這個詞,第二個詞里還是有不懂的詞,接著查詢第三個詞,這樣一直查下去,等到有個詞的解釋你看懂了,那么遞歸到頭,然后你開始后退,逐個弄清前面查過的每個詞,最終,弄明白開始的詞的含義。
從字面意思來看,遞是傳遞,歸是回歸。從傳遞開始回到了傳遞的開始,就是從某個地方出發(fā),回到這個出發(fā)的地方,這就完成一次循環(huán),而不斷重復(fù)同一個循環(huán),叫做遞歸。
有一個大家都熟悉的故事:從前有一座山,山里有個廟,廟里有個老和尚和一個小和尚,老和尚給小和尚講故事,故事是什么呢?從前有座山,山里有座廟,廟里有個老和尚和一個小和尚,老和尚給小和尚講故事,故事是什么呢?從前有座山,山里有一座廟……
這是個關(guān)于遞歸的故事,遞歸有兩個必要的元素,循環(huán)嵌套和自身構(gòu)建。循環(huán)嵌套,指的每次重復(fù)同一循環(huán),且重復(fù)的循環(huán)在上一循環(huán)之中。自身構(gòu)建,指在循環(huán)嵌套中,每一次循環(huán)的內(nèi)容框架模式和上一循環(huán)是相同的,就是有相同的結(jié)構(gòu)。
比如上面那個故事中,循環(huán)嵌套的就是老和尚給小和尚在廟里講故事,其代表了每一層循環(huán)的內(nèi)容相同,且層層嵌套;而自身構(gòu)建的就是這個故事的內(nèi)容,其具有相同的結(jié)構(gòu)和模式。所以,該故事是遞歸的,因為故事循環(huán)嵌套,且故事是由其故事自身相同的結(jié)構(gòu)所嵌套而成的。
仔細(xì)思考后,發(fā)現(xiàn)這里需要注意:
自身構(gòu)建,雖然其基本構(gòu)成有相同的結(jié)構(gòu),但每個結(jié)構(gòu)包含的內(nèi)含是不同的。比如,“老和尚給小和尚在廟里講故事” 是相同的結(jié)構(gòu)模式,但每次循環(huán)中,都是不同的老和尚和小和尚,而說的故事,則包含了其后所有嵌套的故事的總和,即每次循環(huán)中老和尚講的故事,都是后面所有故事的總和,且后面的每個故事都有不同的老和尚和小和尚。
也就是說結(jié)構(gòu)和模式不變,可是結(jié)構(gòu)和模式所承載的數(shù)據(jù)不一樣。那么,從傳遞開始回到傳遞的開始,就是從某個地方出發(fā),回到出發(fā)的地方,地方還是開始的地方,但這地方的環(huán)境數(shù)據(jù),卻與之前變的不同了。
在遞歸的循環(huán)嵌套中,其任何局部的循環(huán)嵌套也是遞歸。比如說,在任意嵌套部分來看,重復(fù)嵌套的結(jié)構(gòu)都是,老和尚和小和尚在廟里說的故事,那么單看這局部,也還是遞歸。所以,在整體上遞歸,在局部也存在遞歸。
遞歸可以跳出并終止。比如老和尚和小和尚的故事可以一直說,此時遞歸就是沒有出口,就是無限循環(huán)嵌套的。如果老和尚和小和尚某次講的故事,內(nèi)容變了,比如老和尚和小和尚在探討宇宙的奧秘,不說自身結(jié)構(gòu)的那個故事,此時遞歸就結(jié)束終止了。于是,這次的老和尚和小和尚就成為了最后的循環(huán),就是遞歸的出口。
同時,遞歸終止開始回溯,從最后一次循環(huán)逐層返回到上一層,代表著故事的層層回歸。在遞歸結(jié)束之前,并沒有任何一個完整的故事,因為每個故事都沒有說完,每一個故事都有下一層的老和尚和小和尚在講,但沒講完的故事。
最后,回溯會來到最開始,就是第一次老和尚和小和尚講故事,這樣得到一個最完整的故事,內(nèi)容是第一次循環(huán)到最后一次循環(huán)之間所有的故事總和。這個故事就包含不同的老和尚、小和尚、廟,直到最后老和尚和小和尚在探討宇宙的奧秘這些數(shù)據(jù)。
在計算機(jī)程序中,遞歸一定要出口,否則會變成死循環(huán),導(dǎo)致程序無法響應(yīng)。實際上,在程序設(shè)計語言之中,遞歸是無處不在的模式。而計算機(jī)程序是模擬和映射現(xiàn)實問題的,所以被遞歸程序所模擬的現(xiàn)實世界,也應(yīng)該是充滿了遞歸的。
參考文獻(xiàn):
[1]方悅. 循環(huán)、迭代與遞歸【J】.電腦知識與技術(shù),.2020.06期 (1):55-57+66.3.2水體景觀設(shè)計。