遞歸和內存分配(可視化)


每一次遞歸調用都將過程(精確地說是“變量”)在內存中復制一遍。一旦一個過程結束(會返回一些數據),這個過程在內存中的副本就被丟棄。遞歸看似簡單,但是可視化跟蹤執行過程就很花費時間。好了,讓我們來看下面的例子:

int Print(int n) //print numbers 1 to n backwards
{
    if(n == 0)
        return 0;
    else
    {
        printf("%d",n);
        return Print(n-1); //recursive call to itself again
    }
}

這個例子中我們假設調用Print函數是傳遞的參數n=4,內存分配的圖示是這樣的:

再來看下階乘函數:

//calculates the factorial of a positive integer
int Fact(int n)
{
    //base case: factorial of 0 or 1 is 1
    if(n == 1)
        return 1;
    else if(n == 0)
        return 1;
    //recursive case: multiply n by (n-1) factorial
    else
        return n*Fact(n-1);
}

流程圖如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM