遞迴(Recursion)是程式設計中的一個技巧,指的是在函式(function)或方法(method)中呼叫自己。
優點:
許多老師、課程、題目會希望使用遞迴來解決問題,筆者覺得最主要的原因是用來練習,讓我們可以嘗試思考問題的本質,練習觀察和歸納,訓練以程式執行的方式思考。
遞迴的基本結構:
遞迴範例:
題目一:計算 n 的階乘
階乘的計算方式為: n 乘以 n-1,直到 n-1 等於 1。
例如 5 的階乘就是 5 * 4 * 3 * 2 * 1 = 120
所以 5 的階乘可以分解為 5 乘上 4 的階乘,而 4 的階乘可以分解為 4 乘以 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
文章撰寫中...請稍後...
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com