遞歸怎么結(jié)束 如何對(duì)遞歸進(jìn)行理解?
如何對(duì)遞歸進(jìn)行理解?既然你想用簡(jiǎn)單的白話來解釋遞歸算法,我就給你解釋一下,確保你能理解。有個(gè)熟悉的故事,正好可以解釋遞歸。這個(gè)故事不斷地調(diào)用自己,遞歸是一個(gè)函數(shù)多次調(diào)用自己。不同的是遞歸不能像這個(gè)故事
如何對(duì)遞歸進(jìn)行理解?
既然你想用簡(jiǎn)單的白話來解釋遞歸算法,我就給你解釋一下,確保你能理解。
有個(gè)熟悉的故事,正好可以解釋遞歸。
這個(gè)故事不斷地調(diào)用自己,遞歸是一個(gè)函數(shù)多次調(diào)用自己。不同的是遞歸不能像這個(gè)故事那樣多次調(diào)用自己。遞歸必須有終止條件,它將在多次調(diào)用后終止。
這個(gè)解釋很口語化。
如何計(jì)算遞歸函數(shù)的調(diào)用次數(shù)?
#包括和限制。H>int max=0//count times int factorial(int n){int sum=0If(n==1)sum=1else sum=factorial(n-1)*nmax return sum}void main(){//列出5的階乘,調(diào)用函數(shù)體factorial(5)printf(%d,max)}
多次步驟:在函數(shù)體外部創(chuàng)建一個(gè)全局變量,然后在函數(shù)內(nèi)部調(diào)用當(dāng)條件滿足時(shí)使其變?yōu)?。變量的最后一個(gè)輸出是調(diào)用數(shù)。下面是一個(gè)C(factoring n)的例子:摘要:使用全局變量。當(dāng)然,也可以在函數(shù)中定義一個(gè)靜態(tài)變量,然后每次調(diào)用該函數(shù)時(shí)將其增量為1。如果不使用后者,則在其他函數(shù)中獲取此函數(shù)的調(diào)用次數(shù)會(huì)很麻煩
請(qǐng)問一下,遞歸函數(shù)是否有一定限制?例如棧的大小和棧的數(shù)量?
必須有限制。
遞歸消耗大量堆棧資源。如果遞歸太多,它將溢出。確切地說,函數(shù)調(diào)用本身將消耗堆棧資源,但在函數(shù)調(diào)用結(jié)束時(shí),將返回函數(shù)使用的堆??臻g,因此這不是一個(gè)大問題。很少看到程序堆滿了。但是遞歸是個(gè)例外。它是一個(gè)在循環(huán)中調(diào)用自身的函數(shù)。在遞歸結(jié)束之前,堆棧使用量將繼續(xù)增長(zhǎng)。程序是否會(huì)溢出取決于遞歸函數(shù)能否在堆棧滿之前返回。目前還不清楚windows中的程序堆棧有多大。但是強(qiáng)烈建議不要使用遞歸,因?yàn)檫@有點(diǎn)貴。遞歸是一種編程概念,但實(shí)際使用較少,畢竟大家都知道,如果次數(shù)較多,這個(gè)東西就會(huì)溢出。只需更改代碼并將其更改為迭代。