【发布时间】:2014-08-16 19:30:24
【问题描述】:
当我运行这行代码时,当它到达素数 199 时,堆栈溢出。 当我将它作为普通 exe 运行时,它会达到 300 和 somehting。
public class primemake
{
public Int64 prime = 2;
public Int64 check;
public void text()
{
Console.Clear();
Console.WriteLine("welcome to prime genorator!");
Console.WriteLine("prime:" + prime );
Console.ReadKey();
check = prime;
checker();
}
public void checker()
{
prime = prime + 1;
if (check == 1)
{
text();
}
else if (prime % check == 0)
{
check = prime;
checker();
}
else if (prime % check != 0)
{
check = check - 1;
prime = prime - 1;
checker();
}
}
}
有人知道发生了什么吗?非常喜欢帮助。
【问题讨论】:
-
递归。从自身调用相同的函数,直到你用完进程提供的堆栈。
-
在不适用 TCO 的语言/环境中嵌套的方法调用过多(在这种情况下)..
-
"任何人都知道发生了什么" ...嗯,是的,你正在耗尽堆栈。这里真正的问题是什么?
-
@user2864740 尾调用优化 (TCO) 作为尾调用优化的首字母缩写词并不是众所周知的首字母缩写词。请不要使用不成熟的首字母缩略词。