亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

遞歸 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 關注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號