Онлайн компилятор C

#include <stdio.h> int akkerman(int m, int n) { if (m == 0) { return n + 1; } if (m > 0 && n == 0) { return akkerman(m - 1, 1); } if (m > 0 && n > 0) { return akkerman(m-1, akkerman(m,n- 1)); } } int main() { int x, y; scanf("%d%d", &x, &y); printf("%d", akkerman(x, y)); return 0; }
这段代码实现了阿克曼函数(Ackermann function),这是一个经典的递归函数,用于测试递归深度。代码逻辑基本正确,但存在一个潜在问题。

- 阿克曼函数递归深度非常大,即使输入很小的m和n(如m=4, n=1),也可能导致栈溢出或程序崩溃。你的代码没有处理这种情况。
- 函数中缺少对m或n为负数的处理,虽然题目可能只要求非负整数,但最好考虑边界情况。