#include int suma_niza(int a[], unsigned n){ if (n == 0) return 0; else { // a se sastoji od prvih n-1 elemenata i n-ti element na kraju // pozicije su od 0 do n-1 // prvih n-1 elemenata su na pozicijama od 0 do n-2 // poslednji element je na poziciji n-1 // argumenti: niz a se ne menja, vec se menja duzina kojoj pristupamo // ako smo sabrali poslednji n-ti element, preostali niz ima duzinu n-1 // a poslednji element se nalazi na poziciji n-1 return suma_niza(a, n-1) + a[n-1]; } } /* suma1([1,2,3,4,5]) = suma1([1,2,3,4] + 5) = suma1(([1,2,3] + 4) + 5) = suma1((([1,2] + 3) + 4) + 5) = suma1(((([1] + 2) + 3) + 4) + 5) = suma1((((([] + 1) + 2) + 3) + 4) + 5) = suma1(((((0 + 1) + 2) + 3) + 4) + 5) = */ // alternativa, posmatramo niz kao prvi element i ostatak niza int suma_niza_poc(int a[], unsigned n){ if (n == 0) return 0; else { // preskacemo prvi element return a[0] + suma_niza_poc(a + 1, n-1); } } // alternativa sa pokazivacima int suma_niza_poc_pok(int *pa, unsigned n){ if (n == 0) return 0; else { // preskacemo prvi element return *pa + suma_niza_poc_pok(pa + 1, n-1); } } /* suma2(a,n): pa -> [1,2,3,4,5], n = 5 1 + suma2(pa+1, 4) suma2( */ int main(int argc, char* argv[]){ int a[5] = {1,2,3,4,5}; printf("prva fja: %d\n", suma_niza(a, sizeof(a)/sizeof(int))); printf("druga fja: %d\n", suma_niza_poc(a, sizeof(a)/sizeof(int))); printf("treca fja: %d\n", suma_niza_poc_pok(a, sizeof(a)/sizeof(int))); // generisanje stek okvira - u dodatnom pdf-u return 0; }