函數在函數體內呼叫自身稱為遞歸呼叫,此類函數稱遞歸函數。每次呼叫進入新層級,需有終止條件避免無限遞歸。
long factorial(int n) {
long result;
if (n == 0 || n == 1) result = 1;
else result = factorial(n-1) * n; // 遞歸呼叫
return result;
}
呼叫 factorial(5):
factorial(1) 終止long factorial(int n) {
if (n == 0 || n == 1) return 1;
long result = 1;
for (int i = 1; i <= n; i++) result *= i;
return result;
}
請參閱《C 語言與記憶體》專題中「棧概念與棧溢出」、「函數棧框結構」、「函數進棧出棧詳細分析」章節,將徹底明白遞歸為何開銷大。