2015-12-31 3 views
1

Я пытаюсь распечатать результат моей возвращенной суммы, но по какой-то причине он выводит 0, но когда я проверяю сумму внутри функции, ее выполнение цели правильно. Например, если я передаю массив из 10 элементов, каждый из которых равен их индексу (0 ... 9), сумма внутри функции равна 45, но когда я распечатываю ее обратно в main(), она печатает 0. Я действительно смущен по меньшей мере.Рекурсия Сумма массива

Вот моя функция, которую я называю использованием:

printf("%d\n", addArray3(arrayA, 9, 0)); 

Чтобы уточнить, Arraya является указателем на 10 item'd массив целых чисел.

// Sums array using recursion 
int addArray3(int (*arrayA)[], int n, int sum){ 
    if (n<0){ 
     return sum; 
    } else { 
     sum += (*arrayA)[n]; 
    } 
    addArray3(arrayA, --n, sum); 
} 

Если кто-то может прояснить это, я бы очень признателен, спасибо!

+2

Конечно, ваш компилятор дает предупреждение при компиляции этого кода. Не игнорируйте предупреждения! – kaylum

ответ

2

Вам не хватает возврата на последней строке. Скомпилируйте все предупреждения, и это может найти это для вас.

Связанные вопрос об этом поведении, которое охватывает, что происходит здесь (не имея возврата): Implicit int return value of C function

-1

Try, как это, он работает для меня в обоих случаях:

1) Сохранение возврата значение в int t. OR

2) Непосредственно печатать возвращаемое значение.

#include <stdio.h> 

int main() 
{ 
     int a[10] = {0,1,2,3,4,5,6,7,8,9}; 
     int t; 

//  t = addArray3(a,9,0); 
//  printf("%d\n",t); 
     printf("%d\n",addArray3(a,9,0)); 
} 

int addArray3(int (*arrayA)[], int n, int sum) 
{ 
     if (n<0) 
     { 
       return sum; 
     } 
     else 
     { 
       sum += (*arrayA)[n]; 
     } 
     addArray3(arrayA, --n, sum); 
} 
0

Проверить это модифицированная функция рекурсии с эффективным использованием указателей:

void addArray3(int *arrayA, int n, int* sum){ 
    if (n<0){ 
     return; 
    } else { 
     *sum += arrayA[n]; 
    } 
    addArray3(arrayA, --n, sum); 
} 

int main() 
{ 
    int ar[] = { 1, 2, 3}; 
    int sum = 0; 
    addArray3(ar, 2, &sum); 
    printf("%d\n",sum); 

    return 0; 
}