当我运行这行代码时,当它到达素数199时,它堆栈溢出。 当我把它作为一个普通的exe运行时,它会达到300而且会有所不同。
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();
}
}
}
谁知道发生了什么事?帮助将非常受欢迎。
答案 0 :(得分:4)
您在 checker
中调用方法checker
。这意味着它是递归的,这意味着它可能(或者在你的情况下,将会)在每次迭代中越来越深入地挖掘自己,最终有如此多的递归调用,正如你所观察到的那样,抛出StackOverflowException
。幸运的是,你可以在没有递归的情况下编写它,只需使用循环。这将解决您的问题。