2015年8月4日 星期二

遞迴(Recursive)

遞迴(Recursion)


一個還沒執行完又呼叫自己,符合條件時才停止的副程式。
一個不停呼叫自己直到滿意為止的程式。

初學時,總覺得莫名其妙,明明迴圈就可以處理了,為何要改成這種沒寫好就會陷入無窮迴圈的模式...

遇過有人看到所寫的程式寫法太"單純",沒用到遞回就質疑學藝不精...

洪教授寫了一篇愚公移山與遞迴,清楚說明了這跟效率與程式可讀性有關,

除此之外,個人認為還有Programmer 習慣與思考迴路的影響...

舉例來說:
假設每個月存3000元,隔月比上個月多存100元,計算存到n個月後會有多少錢?
也就是第1個月存3000元、第2個月存3100、第3個月存3200...

迴圈寫法
///<param name="n">計算月數</param>
///<param name="inc">每月增額</param>
///<param name="deposit">存款</param>
///<returns></returns>
protected int recursive(int n, int inc, int deposit)
{
    int mny = 0;
    for (int i = 1; i <= n; i++)
    {
        mny = mny + deposit + inc * (i - 1);
    }
    return mny;
}

遞迴寫法
///<param name="n">計算月數</param>
///<param name="inc">每月增額</param>
///<param name="deposit">存款</param>
///<returns></returns>
protected int recursive(int n, int inc, int deposit)
{
    return (n == 1) ? deposit : deposit + recursive(n - 1, inc, deposit + inc);
}

沒有留言:

張貼留言