數(shù)學(xué)遞歸定義是什么意思 如何對(duì)遞歸進(jìn)行理解?
如何對(duì)遞歸進(jìn)行理解?既然你想用簡(jiǎn)單的白話來(lái)解釋遞歸算法,我就給你解釋一下,確保你能理解。有個(gè)熟悉的故事,正好可以解釋遞歸。這個(gè)故事不斷地調(diào)用自己,遞歸是一個(gè)函數(shù)多次調(diào)用自己。不同的是遞歸不能像這個(gè)故事
如何對(duì)遞歸進(jìn)行理解?
既然你想用簡(jiǎn)單的白話來(lái)解釋遞歸算法,我就給你解釋一下,確保你能理解。
有個(gè)熟悉的故事,正好可以解釋遞歸。
這個(gè)故事不斷地調(diào)用自己,遞歸是一個(gè)函數(shù)多次調(diào)用自己。不同的是遞歸不能像這個(gè)故事那樣多次調(diào)用自己。遞歸必須有終止條件,它將在多次調(diào)用后終止。
這個(gè)解釋很口語(yǔ)化。
調(diào)用遞歸函數(shù)會(huì)重復(fù)定義函數(shù)中的普通變量嗎?
一般來(lái)說(shuō),遞歸只是在調(diào)用自己。與調(diào)用其他函數(shù)相同。對(duì)于一個(gè)函數(shù),當(dāng)它被調(diào)用時(shí),它內(nèi)部的局部變量只在它內(nèi)部有效,獨(dú)立于外部調(diào)用函數(shù),并且在被調(diào)用函數(shù)返回后自動(dòng)釋放。因此,如果被調(diào)用函數(shù)只返回地址的值,例如整數(shù)或字符,則外部函數(shù)可以使用同一類(lèi)型變量來(lái)保存返回地址的值。但是如果你返回一個(gè)數(shù)組,一個(gè)連續(xù)的地址,那么你只返回第一個(gè)地址,你不能一次保存所有的地址值。然后,當(dāng)函數(shù)調(diào)用結(jié)束時(shí),這些地址被釋放,它們就消失了。所以我希望被調(diào)用的函數(shù)將數(shù)組返回給外部函數(shù)。全局?jǐn)?shù)組或malloc用于動(dòng)態(tài)請(qǐng)求內(nèi)存并返回內(nèi)存。當(dāng)然,也可以在內(nèi)部遞歸地定位靜態(tài)變量。每個(gè)調(diào)用使用相同的內(nèi)存,靜態(tài)存儲(chǔ)不會(huì)自動(dòng)釋放。遞歸在函數(shù)體中調(diào)用自己。如果不受控制,它將繼續(xù)調(diào)用自身,直到堆棧溢出。循環(huán)是區(qū)域內(nèi)一段代碼的重復(fù)執(zhí)行,如果不加以控制,就會(huì)形成死循環(huán)。所以無(wú)論是遞歸還是循環(huán),都必須設(shè)置一定的條件來(lái)結(jié)束遞歸或循環(huán)。在實(shí)際問(wèn)題中,有一些問(wèn)題是遞歸的。用遞歸程序來(lái)解決這樣的問(wèn)題會(huì)感覺(jué)更自然,程序也會(huì)更簡(jiǎn)單。然而,遞歸經(jīng)常調(diào)用函數(shù),并且開(kāi)銷(xiāo)(內(nèi)存、時(shí)間)很大。有些問(wèn)題不適合使用。循環(huán)不需要自己調(diào)用,甚至不能調(diào)用函數(shù),效率很高。但是,遞歸應(yīng)該改為非遞歸返回,你可能要?jiǎng)幽X筋了
調(diào)用程序本身的編程技術(shù)叫遞歸。遞歸作為一種算法,在編程語(yǔ)言中有著廣泛的應(yīng)用。一個(gè)進(jìn)程或函數(shù)在其定義或描述中有自己的直接或間接調(diào)用的方法。它通常把一個(gè)大而復(fù)雜的問(wèn)題轉(zhuǎn)化成一個(gè)類(lèi)似于原問(wèn)題的小問(wèn)題。遞歸策略只需要少量的程序來(lái)描述問(wèn)題求解過(guò)程中所需的重復(fù)計(jì)算,大大減少了代碼量。遞歸的能力是用有限的語(yǔ)句定義一組無(wú)限的對(duì)象。一般來(lái)說(shuō),遞歸需要邊界條件、遞歸前向段和遞歸返回段。當(dāng)邊界條件不滿(mǎn)足時(shí),遞歸前進(jìn);當(dāng)邊界條件滿(mǎn)足時(shí),遞歸返回。擴(kuò)展數(shù)據(jù):遞歸應(yīng)用程序1。數(shù)據(jù)的定義是通過(guò)遞歸來(lái)定義的。(斐波那契函數(shù))2。這類(lèi)問(wèn)題雖然沒(méi)有明顯的遞推結(jié)構(gòu),但用遞推法求解比用迭代法簡(jiǎn)單,如Hanoi問(wèn)題。三。數(shù)據(jù)的結(jié)構(gòu)是遞歸定義的。遞歸算法的缺點(diǎn)是效率低于loop等常用算法。因此,應(yīng)該盡量避免遞歸,除非沒(méi)有更好的算法或者遞歸更適合特定的情況。在遞歸調(diào)用過(guò)程中,系統(tǒng)打開(kāi)一個(gè)棧來(lái)存儲(chǔ)每一層的返回點(diǎn)和局部數(shù)量。太多的遞歸很容易導(dǎo)致堆棧溢出。