2013-10-26 3 views
0

У меня есть функция, которая принимает массив a[] и его длину n. Я должен вычислить сумму чисел внутри массива. Я написал эту рекурсивную функцию:Рекурсивная функция для целых чисел

int somma(int a[], int n) 
{ 
if (n == 0) { return 0; } 
else {return a[n] + somma(a, n-1);}  
} 

И я называю это в моем main() таким образом:

int main() { 

int array[5], ris; 

printf("Type the numbers of the array: \n"); 

for(int i=0; i<4; i++) 
{ 
    scanf("%d", &array[i]); 
} 

printf("\nThe sum is: %d.", somma(array,4)); 

getch(); 
return 0; 
} 

Если массив содержит array = [2; 4; 7; 5] Printf должен показать 18 (2 + 4 + 7 + 5) , Кстати, функция возвращает мне 88, вы можете мне помочь?

Я использую wxDevC++.

+0

Не забывайте, что 'a [0]' также является элементом массива, который 'somma' пропускает. – Kninnug

ответ

1

Вы только читаете первые четыре значения в массиве. array[4] содержит значение мусора

for(int i=0; i<5; i++) //change to 5 
{ 
    scanf("%d", &array[i]); 
} 

somma Ваша функция тоже неправильно. Он всегда будет добавлять 0 для arr[0].

if (n == -1) { return 0; } //change to this 
1

Вы можете попробовать это: -

for(int i=0; i<=4; i++) 
{ 
    scanf("%d", &array[i]); 
} 

также исправить ваш Сомма

if (n == -1) 
{ 
    return 0; 
} 
1

Если массив имеет n элементов, то последний элемент имеет индекс n-1. Исправьте somma функцию следующим образом:

int somma(int a[], int n) { 
    if (n <= 0) { 
     return 0; 
    } 

    return a[n-1] + somma(a, n-1);  
} 

Кроме того, есть два (незначительные) проблемы с вашим кодом:

  1. Объявление переменной внутри for головки в for(int i=0; i<4; i++) не допускается C89, только C99 и C++ , Вероятно, DevC++ компилирует его, потому что файл рассматривается как C++, но вы должны знать, что он не будет компилироваться в GCC, если вы не используете переключатель -std=c99.
  2. getch подходит для Windows. В системах POSIX вместо этого используйте getchar.
+0

, но пропускает [0]? –

+0

Да, вы правы. Я обновил условие выхода для рекурсии. –

+0

О, хорошо, это хорошо;) I + 1'd –

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