遞迴(Recursion)介紹(以C#為例)

遞迴(Recursion)是程式設計中的一個技巧,指的是在函式(function)或方法(method)中呼叫自己。

優點:
  • 程式碼簡潔:可以使用很少的程式碼解決問題
  • 直觀的解決方式:將問題分解為相同的小問題,讓問題的解法變得很直觀
缺點:
  • 除錯困難:必須要對問題和遞迴程式碼有足夠多的了解,才能分析
  • 效能問題:在程式中會持續的呼叫自己,持續累積直到達成終止條件後才會釋放記憶體,可能佔用大量的資源
既然會有效能問題,那為什麼還要使用遞迴?
許多老師、課程、題目會希望使用遞迴來解決問題,筆者覺得最主要的原因是用來練習,讓我們可以嘗試思考問題的本質,練習觀察和歸納,訓練以程式執行的方式思考。

遞迴的基本結構:
  1. 終止條件:當條件滿足時不繼續呼叫自己,終止執行
  2. 處理邏輯:就是解決問題的程式碼
  3. 回傳結果(非必要):將結果向上傳遞給呼叫自己時的方法


遞迴範例:

題目一:計算 n 的階乘

階乘的計算方式為: n 乘以 n-1,直到 n-1 等於 1。
例如 5 的階乘就是 5 * 4 * 3 * 2 * 1 = 120

所以 5 的階乘可以分解為 5 乘上 4 的階乘,而 4 的階乘可以分解為 4 乘以 3 的階乘...。 轉換為程式碼的結果如下:
    
int Factorial(int number)
{
    // 終止條件
    if (number == 1) return 1;
    
    // 處理邏輯:n 乘上 n-1 的階乘 
    var result = number * Factorial(number - 1);
    
    // 回傳結果
    return result;
}
    

呼叫方式:
    
var factorial = Factorial(5);
Console.WriteLine($"factorial: {factorial}"); // 120
    



文章撰寫中...請稍後...

留言