
Ackermann 函數是雙參數遞歸函數,增長極快,遞歸深度極大,常用於測試編譯器對尾遞歸優化、棧幀管理能力。
#include <stdio.h>
int ackerman(int m, int n) {
if (m == 0) return n + 1;
if (n == 0) return ackerman(m - 1, 1);
return ackerman(m - 1, ackerman(m, n - 1));
}
int main() {
int m, n;
scanf("%d %d", &m, &n);
printf("%d", ackerman(m, n));
return 0;
}
ackerman(4, 2) 即導致棧溢出崩潰(數值超 19000 位,遞歸調用數億次)。m >= 4 的情況。本文僅作入門介紹,深度優化留待進階探討。