为了账号安全,请及时绑定邮箱和手机立即绑定

递归 Java 方法

递归 Java 方法

陪伴而非守候 2021-10-20 14:57:01
我有一小段代码用于计算某些数字的总和:public class TestClass {    public static int sumOfNums(int num[], int int) {           if(int == num.length-1) return int;         else if( (num[int]%2==0) || num[int] <= 0 ) {            return num[int] + sumOfNums(num, int+1); }        else return 0 + sumOfNums(num, int+1);      }    public static void main(String[] args) {        int[] arr = {-2,0,8,4,5,6,10,-5,-2,7,9};        System.out.println(sumOfNums(arr, 0));    }}但是,每当我运行打印语句时,都会出现异常:Exception in thread "main" java.lang.StackOverflowError    at TestClass.sumOfNums(TestClass.java:13)    at TestClass.sumOfNums(TestClass.java:10)有谁能够帮助我?
查看完整描述

3 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

正如另一位用户所说,您的递归永无止境。

更改arr[head-1]head-1应该在此行上解决此问题:

else return 0 + sumNegEven(arr, arr[head-1]);

并在这里更改它:

return arr[head] + sumNegEven(arr, arr[head-1]); }


查看完整回答
反对 回复 2021-10-20
?
狐的传说

TA贡献1804条经验 获得超3个赞

public class TestClass {


    public static int sumNegEven(int arr[], int head) { 


        if(head == 0) {

            return 0;

        } else if( arr[head]%2==0 || arr[head] <= 0 ) {

            return arr[head] + sumNegEven(arr, head-1); 

        } else {

            return 0 + sumNegEven(arr, head-1);  

        } 

    }


    public static void main(String[] args) {

        int[] arr = {-2,0,8,4,5,6,10,-5,-2,7,9};


        System.out.println(sumNegEven(arr, arr.length-1));

    }

}

通过调用 arr[head-1] 您调用的是索引的值而不是索引,它们持续很长时间,因为递归没有终止。如果您调用 head-1,您正在调用实际索引,并且将毫无例外地得到答案 21。


查看完整回答
反对 回复 2021-10-20
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

这不会处理数组中的第一项


if(head == 0) {

     return 0;

}


你必须把它改成


if(head < 0) {

     return 0;

}


查看完整回答
反对 回复 2021-10-20
  • 3 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号