C語言遞歸函數的執行與求解_第1頁
C語言遞歸函數的執行與求解_第2頁
C語言遞歸函數的執行與求解_第3頁
C語言遞歸函數的執行與求解_第4頁
C語言遞歸函數的執行與求解_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

本文格式為Word版,下載可任意編輯——C語言遞歸函數的執行與求解C語言遞歸函數的執行與求解

導語:函數的遞歸調用是在調用一個函數的執行過程中,直接或間接地調用該函數本身,使用遞歸函數的程序布局明顯,簡樸、易懂。下面就由我為大家介紹一下C語言遞歸函數的執行與求解,接待大家閱讀!

1遞歸函數

C語言的特點之一就在于允許函數的遞歸調用,即允許在函數內部直接或間接的調用函數自身,被調用的函數被稱為遞歸函數。遞歸調用有直接遞歸調用和間接遞歸調用兩種形式,遞歸函數常用于解決那些需要分屢屢求解且每次求解過程都根本類似的問題。構造遞歸函數的關鍵在于探索遞歸算法和終結條件。遞歸算法就是解決問題所采取的方法和步驟,一般只要對問題的若干次求解過程舉行分析和歸納,找出每一次求解過程之間的規律性,就可歸納出遞歸算法,終結條件是為了終結函數的遞歸調用而設置的一個條件或規矩。遞歸調用的一般形式為:

函數類型函數名參數列表

,,,,,

函數名參數列表

…..

2遞歸條件

使用遞歸調用編寫程序時,要留神以下幾點:

1可以通過遞歸調用來縮小問題規模,且新問題與原問題有著一致的形式,只是所處理的對象具有確定的規律性。也就是說解決問題的方法一致,調用函數的參數有規律的遞增或遞減。

2遞歸函數務必有一個終止處理條件,即務必有一個明確的終止條件,務必在適當的時候能夠終止遞歸調用,否那么會使程序陷入死循環,導致系統崩潰。

3有些使用遞歸算法求解的問題也可使用普遍循環算法來實現,相較于循環程序,遞歸程序布局簡樸,規律明顯,但運行效率低,故在有其他算法可以代替的處境下,要盡量制止使用遞歸算法編寫程序。

3遞歸實例

例:使用遞歸方法求n!。

在數學上n!=1×2×3×…×n-1×n,我們可以寫成以下形式

1當n=0或n=1時

n!=

n-1!×n當n1時

根據以上形式,可以寫出如下遞歸調用程序:

intfn

ifn==1||n==0

return1;

else

returnfn-1*n;

intmain

intn;

scanf“%d”,n;

ifn0

printf“dataerror!”;

else

printf“%d”,fn;

return0;

4遞歸函數執行過程

遞歸調用之所以能夠實現,是由于函數在每一次執行過程中,都會把自己全體形參變量和局部變量復制一個副本,壓入棧中,這些副本分別位于棧中不同的內存空間,和函數的其他執行過程毫不相干,這種機制使得遞歸調用成為可能。一個遞歸函數的執行過程類似于調用函數和被調用函數是同一個函數的多層嵌套調用,因此,和遞歸函數的執行過程緊密相關的一個重要概念就是遞歸函數運行的層次。假設調用該遞歸函數的主函數為第0層,那么從主函數調用遞歸函數那么進入第一層;從第n層調用本函數那么進入“下一層”,即第n+1層。反之,退出第n層遞歸調用應返回至“上一層”,即第n-1層。

在遞歸函數的執行過程中,另一個分外重要的概念是“遞歸工作棧”的使用,當一個函數調用者調用另外一個函數被調用者時,系統會把調用者的全體實在參數,被調用者的形式參數、局部變量,以及調用者的返回地址等信息全部壓入“遞歸工作棧”暫存,當被調用者執行完畢時,系統會從棧中彈出被調用者的形式參數和局部變量,釋放被調用者所占用的數據區,接著被調用者返回,然后系統從棧中彈出調用者的返回地址,和實在參數等信息,此時調用者函數可以持續執行下去。

5求解方法

我們通過舉例來說概括說明遞歸函數的求解,譬如在主函數中輸入n的值為5,即求5!,那么函數的求解過程可以用圖1-1表示:

以上問題的概括求解過程描述如下:①調用函數f5,n=5,函數f5的返回結果是f4*5,系統暫存f5的形參和中間計算結果,然后轉去調用函數f4。②執行函數f4,n=4,函數f4的返回結果是f3*4,系統暫存f4的形參和中間計算結果,然后轉去調用函數f3。③執行函數f3,n=3,函數f3的返回結果是f2*3,系統暫存f3的形參和中間計算結果,然后轉去調用函數f2。④執行函數f2,n=2,函數f2的返回結果是f1*2,系統暫存f2的形參和中間計算結果,然后轉去調用函數f1。⑤執行函數f1,n=1,函數f1返回結果1,f1執行完畢,系統釋放f1的.形參和中間變量所占的數據區,然后返回到調用函數f1處。⑥函數f2返回結果f1*2=1*2=2,f2執行完畢,系統釋放f2的形參和中間變量所占的數據區,然后返回到調用函數f2處。⑦函數f3返回結果f2*3=2*3=6,f3執行完畢,系統釋放f3的形參和中間變量所占的數據區,然后返回到調用函數f3處。⑧函數f4的返回結果f3*4=6*4=24,f4執行完畢,系統釋放f4的形參和中間變量所占的數據區,然后返回到調用函數f4處。⑨函數f5返回結果f4*5=24*5=120,f5執行完畢,系統釋放f5的形參和中間變量所占的數據區,然后返回到調用函數f5處,即main函數,此問題求解終止。

6終止語

函數的遞歸調用,可以把一個大型繁雜的問題層層轉化為一個與原問題好像

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論