java里递归次数太多,为什么会出错?

萌新自己写了一个用链表找质数的代码,运行时没问题,但如果输入的数太大,就会出错,为什么会这样?求大神解答,万分感谢!
代码如下:

//一个找出质数的程序

public class Zhishu{
public static Zhishu firstZhishu=new Zhishu(2);
public Zhishu next=null;
public int number=0;

  private Zhishu(int number){
     this.number=number;
  }

  public static void main(String[] args){
     Zhishu.find(19);
     Zhishu.find(17);
     Zhishu.find(100);
     Zhishu.find(1000);
     Zhishu.find(1069);
     Zhishu.find(3630);
     Zhishu.find(5000);
  }

  public static void find(int n){
     find(n,firstZhishu);
  }

  private static void find(int n,Zhishu a){
        if (n==a.number){
           System.out.println(n+"是质数");
           return;
        }else if(n<a.number){
           System.out.println(n+"不是质数");
           return;
        }else if(a.next==null){
           find(a.number+1,n,a);
        }else{
           find (n,a.next);
        }
  }



  private static void find(int i,int n,Zhishu a){
     if (i<n){
        if (test(i,firstZhishu)){
           a.next=new Zhishu(i);
           find(i+1,n,a.next);
        }else{
           find(i+1,n,a);
        }
     }else{
        if (test(n,firstZhishu)){
           a.next=new Zhishu(n);
           System.out.println(n+"是质数");
        }else{
           System.out.println(n+"不是质数");
        }
     }
  }

  private static boolean test(int i,Zhishu a){
        if (i%a.number==0){
           return false;
        }else if(a.number*2>i){
           System.out.println("找到质数"+i);
           return true;
        }else{
           return (test(i,a.next));
        }
  }

}

运行结果如下:图片说明

图片说明

如果报的是栈溢出就没什么好奇怪的哈,递归次数过多,虚拟机一直执行压栈操作,很快栈内存就不足了,你可以把线程的栈内存空间分配大点

出错的截图是什么?

贴图看看

递归次数过多,虚拟机一直执行压栈

你的递归上SystemClock.sleep(100);延迟个一百毫秒,那么不管你递归多少次,都不会有错。

哦是我的错,你应该写java的try{
Thread.sleep(100);
}catch(Exception e){
}

你知道sleep是啥意思么,一秒钟分为1000毫秒,1000毫秒又分为1000微秒 10 就是百分之一秒。延迟那么少有个毛线用,听哥的,延迟加到500,保证你无限循环都不会有错

不然不管你分配多大内存,迟早有天都会出错,话说你也没办法分配内存。楼上你采纳的答案肯定没用,你知道怎么分配更大的内存么,哥哥我做了五年java,都不知道我要怎么给我的软件分配更大的内存。所以最低延迟100毫秒,因为jvm虚拟机回收内存的时间一般是50-80毫秒,你得错开这段时间

我也试了一下,死递归不被java允许,java会在你递归过多次后抛出错误,所以如果你想尝试死循环,你得while(true) 或者for(;;);也就是说你的程序绝对无可能一直运行下去