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

