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

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 怎么用protues测量通频带
  • ¥15 zepelin使用sparkInterpreter 异常
  • ¥15 paho mqtt 接收不到消息
  • ¥15 函数r关于两个分量y,z方向上的图像,分开画r随y的图像,r随z的图像
  • ¥15 如何用Matlab求Pearcey函数的数值积分?
  • ¥15 一个简单的函数定义问题,输出结果是相反的,怎么回事呢?
  • ¥15 页面加载报错,不知道怎么处理
  • ¥20 vue-draggable-resizable选中状态保持
  • ¥15 flink cdc读取SqlServer2016