2015-12-31 1 views
1

J'essaie d'imprimer le résultat de ma somme retournée mais pour une raison quelconque, il imprime 0, mais quand je vérifie la somme à l'intérieur de la fonction, elle réalise correctement son objectif. Par exemple si je passe dans un tableau de 10 items chacun égal à leur index (0 ... 9) la somme à l'intérieur de la fonction est 45 mais quand je l'imprime dans main() il imprime 0. Je suis vraiment confus Pour dire le moins.Récurrence Sum of Array

Voici ma fonction, que j'appel à l'aide:

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

Pour clarifier, Arraya est un pointeur sur un tableau 10 item'd d'entiers.

// 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); 
} 

Si quelqu'un peut éclaircir cela, je l'apprécierais vraiment, merci!

+2

Sûrement votre compilateur vous donne un avertissement lorsque vous compilez ce code. N'ignorez pas les avertissements! – kaylum

Répondre

2

Il vous manque un retour sur la dernière ligne. Compilez avec tous les avertissements et il se peut que cela vous plaise.

question connexe sur ce comportement qui couvre ce qui se passe ici (ne pas avoir un retour): Implicit int return value of C function

-1

Essayez, comme celui-ci, il travaille pour moi dans les deux cas:

1) Stockage du retour valeur en int t. OU

2) Impression directe de la valeur de retour.

#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

Cochez cette fonction récursive modifiée avec une utilisation efficace des pointeurs:

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; 
}