【发布时间】:2017-07-01 03:56:09
【问题描述】:
这个程序以溢出结束:
ConsoleApplication3.exe 中出现“System.StackOverflowException”类型的未处理异常
我怎样才能让它继续运行而不崩溃?
我最多只能看到ack(4,0)。
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
Console.WriteLine(i.ToString() + "," + j.ToString() + "=" + ack(i, j));
}
}
}
static int ack(int m,int n)
{
int ans;
if (m == 0)
ans = n + 1;
else if (n == 0)
ans = ack(m - 1, 1);
else
ans = ack(m - 1, ack(m, n - 1));
return ans;
}
}
【问题讨论】:
-
关于堆栈溢出的问题......关于stackoverflow。很棒。
-
您应该尝试将
m转为0... -
Ackermann Function应该很快就会变得非常庞大。
-
这里重要的部分是“没有崩溃”。无法处理堆栈溢出异常。根据它的定义,你已经溢出了堆栈,你想做的任何处理都需要堆栈空间。做不到。因此,您需要找出一种方法来避免堆栈溢出,而不是如何处理它。
标签: c#