极昼暗语leo 2017-11-24 04:20 采纳率: 100%
浏览 4144
已采纳

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));
        }
  }

}

运行结果如下:图片说明

图片说明

  • 写回答

8条回答 默认 最新

  • wb_snail 2017-11-24 04:52
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同