2014-02-01 2 views
2

Я пытаюсь написать рекурсивную функцию, которая возвращает сумму первых n мест в массиве. Это мой код (Java):Функция, которая возвращает сумму первых n мест массива

static int sumN(int[] A, int n) 
    { 
    if (n == 0) return n; 
    return sumN(A, (n-1)) + A[n]; 
    } 

Это не работает должным образом. У тебя есть идеи? Мне также не хватает достаточного if-n-is-weird-return-something-else.

+3

Почему это не работает? –

+0

* Как это работает? – chrylis

+0

'A [n]' или 'A [n-1]'? – devnull

ответ

4

Попробуйте это:

public static int sumN(int[] A, int n) { 
    if (n <= 0) 
     return 0; 
    return A[n-1] + sumN(A, n-1); 
} 

Существовали несколько проблем, с индексами, помните, что массивы в Java являются 0 на основе. Вы можете проверить это работает, как ожидалось:

int[] a = {1, 2, 10, -7, 8, 99}; 
System.out.println(sumN(a, 4)); 
=> 6 
+0

@devnull yep, исправил это! –

+0

Спасибо за ответ, но это все еще не работает. Функция возвращает 209 при вводе sumN (A, 4), где A = {1, 2, 10, -7, 8, 99}. – KSHMR

+0

@ user1614466 Попробуйте сейчас; должен работать на вас. – devnull

0

Вы не должны возвращаться n но A[0] там. Также я добавил чек для n вне диапазона.

static int sumN(int[] A, int n) { 
    if (n < 0 || n > A.length - 1) return 0; // or some error value 
    if (n == 0) return A[0]; // so not n 
    return sumN(A, (n-1)) + A[n]; 
} 
+0

Спасибо, но это не сработает. Функция возвращает 112 при вводе sumN (A, 4), где A = {1, 2, 10, -7, 8, 99}. – KSHMR

0

Почему используя рекурсивный метод, когда вы можете использовать прямой путь к летовок номера :)

+0

Я знаю, что это очень плохо, потому что это можно легко решить простым способом, но инструкции так говорят. – KSHMR

+1

Я вижу, поэтому используйте решение выше, данное @Oscar Lopez –

0

взгляд к этому решению непосредственно из среды IDE NetBeans :) enter image description here

она работает очень хорошо :)

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