歡迎跟我連絡

本頁最下方有Web MSN可以直接跟我交談喔!
免安裝程式...哈哈 歡迎聊天

2008年3月31日 星期一

遞迴函數 Recursive Function

Recursion即為[遞迴]之意,當一個函數可以呼叫他自己時,這種函數就是Recursive Function.
寫法:
void factorial(int n)
{
   if(n<=1)
      return 1;
   else
      return n*factorial(n-1); //自己呼叫自己
}
要真正了解Recursion就必須先探討Function Call的內部行為.當我們呼叫一個函數的時候,我們會先把就有的狀態存放在堆疊中,當我們return時才將存放在堆疊(Stack)中的資料取出.
stack:是一種儲存器,為了追蹤紀錄Recursion和其它資料.它的功能和一疊紙相似,可將很多訊息放在裡面.像在呼叫Recursive Calls時,期間被暫停的計算就是先存放在stack中的.
所以說,使用遞迴是很佔用記憶體空間的,但好處是我們可以利用遞迴將程式簡單化,遞迴是以空間換取時間(時間通常是指程式寫作時間,非執行時間).
Recursion程式的設計技巧:
(1)找出終止條件[否則便成無窮迴圈] (2)找出遞迴關係

遞迴優缺點:
優點:某些問題是以遞迴的方式定義的,以遞迴函數來製作會比較簡潔易懂,程式寫作的時間也可以縮短.
缺點:遞迴函數花費了太多的能量,執行起來通常較非遞迴的版本為慢.
所有的迴圈都可以用遞迴去處理(有起點,終點),但是值不值得使用遞迴,這就有待思考,無怪乎有人說遞迴是個爛方法中的好方法,哈哈...

0 個回應:

MSN狀態(我在線上時,可以跟我交談喔)