Mai intai de a gasi greseala trebuie sa stim ce ar trebui sa faca functia.
Presupun ca functia suma primeste un parametru numar intreg care calculeaza suma intr-un vector (in care indexarea incepe de la 1). Functia calculeaza recursiv suma elementelor din vector de pe pozitii pare (intr-un mod ineficient.)
In primul rand trebuie sa modificam "return suma(i+1)+a[i]" cu "return suma(i-1)+a[i]" pentru a scapa de bucla infinita (si pentru a calcula ce trebuie sa calculam).
In al doilea rand ar trebui sa implementam un sistem de validare mai bun (daca i este negativ s-ar putea sa avem probleme). Pentru simplitate daca i este negativ se va returna valoarea 0.
In al treilea rand acele instructiuni else-uri sunt redundante. Daca functia returneaza o valoare instructiunile ulterioare nu mai sunt executate.
Astfel functia devine :
int suma(int i)
{if (i<=0) return 0;
if (a[i]%2==0) return suma(i-1)+a[i];
return suma(i-1);
}