C# 遞迴(Recursive)

此為個人學習筆記,如果有理解錯誤或是相關資訊歡迎留言告知與分享,謝謝!

參考影片: 小山的 C# 教學

什麼是遞迴?

它是一個方法,一直不斷的呼叫自己,直到某些條件被滿足因而停止。

 


遞迴?迴圈?

遞迴優點

  • 可以處理較複雜的問題
  • 程式碼比較簡潔且可讀性高

遞迴缺點

  • 執行效率較差
  • 有可能導致堆疊溢位(stack overflow)(下面會解釋)
     

遞迴的運作原理?

遞迴產生的變數值會先暫存在Stack(之前曾經有稍微提到Stack -> C# Value & Reference Type)

等用到時將它取回(取回後便不會占用stack記憶體空間嗎??)

所以如果存入極多的值或是終止條件沒寫好而產生無窮迴圈的時候,便會導致stack overflow

 

當一個方法呼叫另一個方法時,會先執行完被呼叫的方法,再回來繼續執行自己的方法

這是Stack的特性????先進後出(存入順序: A, B, C,取出順序: C, B, A)

 


e.g.,

題目:1 + 3 + 5 + .... + 13 = ?

public static int RecSum(int num)
{
    if (num < 1)
    {
        return 0;
    }
    else
    {
        return num + RecSum(num - 2);
    }
}

RecSum(13)

 

執行結果

49

 

可以試試看用迴圈寫出~