當前位置:編程學習大全網 - 編程語言 - 什麽是遞歸函數? 怎樣實現遞歸?

什麽是遞歸函數? 怎樣實現遞歸?

遞歸就是壹個函數在它的函數體內調用它自身。執行遞歸函數將反復調用其自身,每調用壹次就進入新的壹層。遞歸函數必須有結束條件。?

當函數在壹直遞推,直到遇到墻後返回,這個墻就是結束條件。?

所以遞歸要有兩個要素,結束條件與遞推關系。

遞歸有兩個基本要素:

(1)邊界條件:確定遞歸到何時終止,也稱為遞歸出口。

(2)遞歸模式:大問題是如何分解為小問題的,也稱為遞歸體。遞歸函數只有具備了這兩個要素,才能在有限次計算後得出結果?

在遞歸函數中,調用函數和被調用函數是同壹個函數,需要註意的是遞歸函數的調用層次,如果把調用遞歸函數的主函數稱為第0層,進入函數後,首次遞歸調用自身稱為第1層調用;從第i層遞歸調用自身稱為第i+1層。反之,退出第i+1層調用應該返回第i層。

壹個遞歸函數的調用過程類似於多個函數的嵌套的調用,只不過調用函數和被調用函數是同壹個函數。為了保證遞歸函數的正確執行,系統需設立壹個工作棧。具體地說,遞歸調用的內部執行過程如下:

(1)運動開始時,首先為遞歸調用建立壹個工作棧,其結構包括值參、局部變量和返回地址;

(2)每次執行遞歸調用之前,把遞歸函數的值參和局部變量的當前值以及調用後的返回地址壓棧;

(3)每次遞歸調用結束後,將棧頂元

擴展資料:

遞歸就是某個函數直接或間接地調用了自身,這種調用方式叫做遞歸調用。說白了,還是函數調用。既然是函數調用,那麽就有壹個雷打不動的原則:所有被調用的函數都將創建壹個副本,各自為調用者服務,而不受其他函數的影響。

妳的ff函數,遞歸多少次,就有多少個副本,再利用內存的棧式管理,反向退出。這個最好找壹下“棧”這方面的東西看看,挺容易的,就像子彈匣壹樣,先進後出。

從某種意義上說,這是不對的,因為就像剛才說的,壹旦被調用,他將在內存中復制出壹份代碼,再被調用就再復制壹份,換句話說,妳可以吧同壹個函數的多次調用理解稱謂多個不同函數的壹次調用,這樣也會會簡單些。

再說=1和=0是為什麽退出。遞歸,很需要註意的就是死遞歸,也就是說,某壹個函數進入了無限調用自身的情況,永無止境地消耗內存等資源,這在編程方面是壹大忌。

但凡是遞歸的函數,壹定會在某壹個地方存在能夠返回上壹層函數的代碼,否則必定死遞歸。ff函數中,那個else就是返回的出口,妳可以這樣想,如果沒有那個if來進行判斷,妳遞歸到什麽時候算完?ff是不是會壹直調用自己。

因為壹旦某個函數A中調用了函數B(或者自己),那麽A中的代碼會停在調用的位置,而轉向B中去執行,同理,如果B又調用函數C,那麽B又停在調用的位置,去執行C,如果無限調用,那麽程序是永遠不會結束的。

當然,也有這種情況,A調用B,然後繼續自己的代碼,不管B的死活,這種不在我們的討論範圍內,因為那牽扯到另壹種編程方式:多線程。

參考資料:

百度百科——遞歸函數

  • 上一篇:請問,什麽是PLC?
  • 下一篇:vr眼鏡能用什麽軟件
  • copyright 2024編程學習大全網