2015-02-02 4 views
-1

Я пытаюсь подытожить элементы массива. Когда я проверяю свой код, сумма всегда отключается на единицу. Например, если я ввожу: 20, 40,30 он дает мне 89 вместо 90. Я не совсем уверен, что я делаю неправильно. Если бы кто-нибудь мог указать мне в правильном направлении, это было бы здорово! БлагодаряОшибка рекурсии в сумме массива

Это то, что я до сих пор:

public static void main(String[] args){ 
    int size = kbd.nextInt(); 
    int [] myArray = new int [size] 
    //user inputs the elements of array 
    for(int i =0; i<myArray.length; i++){ 
     myArray[i]= kbd.nextInt(); 
    } 
    int total = sumNum(myArray,0, myArray.length-1) 
    System.out.println("The sum is"+ total); 
} 

public static int sumNum(int [] array, int begin, int end){ 
    if(begin > last) { 
     return -1; 
    } 
    else { 
     int total = sumNum(array, begin +1, end)+ array[first]; 
    } 
} 
+2

Что является 'вернуть -1' делать? Запуск элементов массива фактически не влияет на вашу сумму, поэтому вы должны вернуть 0. – ryanyuyu

+0

В вашем коде содержится много синтаксических ошибок - сделайте его компилятивным и, вероятно, он решит ваши проблемы. Используйте отладчик и небольшой размер массива, чтобы найти основную причину. – bedrin

+0

Я просто вообще написал код здесь не обязательно со всем синтаксисом. У меня этот код работает и компилируется. Мне просто нужна помощь при вычислении логической ошибки – user3582249

ответ

1

Базовый случай неправильно: Допустим, вы подведении int[] A = {1}, а также расширить свой вызов функции рекурсии следующим образом:

sumNum(A, 0, 0) = sumNum(A, 1, 0) + A[0] = -1 + A[0] 

Вы видите, наконец sumNum(A, 1, 0) возвращает -1, и мы получаем A[0] - 1.

Соответствие действительности: sumNum(A, 1, 0)0.

+0

Большое вам спасибо! – user3582249

+0

@ user3582249 Добро пожаловать :) –

0

Я уверен, что это может быть улучшен, и его не хвостовая рекурсия, но как насчет:

public class Recurs { 

    public static void main(String[] args){ 

     int [] myArray = new int[]{20,40,30} ; 

     int total = sumNum(myArray,0); 

     System.out.println("The sum is "+ total); 
    } 

    public static int sumNum(int [] array, int begin){ 
     if(begin == array.length) { 
      return 0; 
     } 
     else { 
      return sumNum(array, begin + 1) + array[begin]; 
     } 
    } 

} 
Смежные вопросы