创建素数时出现堆栈溢出错误

时间:2014-08-16 19:30:24

标签: c# stack

当我运行这行代码时,当它到达素数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();
        }
    }
}
谁知道发生了什么事?帮助将非常受欢迎。

1 个答案:

答案 0 :(得分:4)

您在 checker中调用方法checker 。这意味着它是递归的,这意味着它可能(或者在你的情况下,将会)在每次迭代中越来越深入地挖掘自己,最终有如此多的递归调用,正如你所观察到的那样,抛出StackOverflowException。幸运的是,你可以在没有递归的情况下编写它,只需使用循环。这将解决您的问题。