Moim zadaniem jest obliczenie sumy wartości w tablicy rekurencyjnie, w taki sposob, że wybieram wyraz środkowy i dziele tablice na 2 prawie rowne częsci i tak w kólko
Udało mi się to zrobić w ten sposób:
Wiem jednak, że to nie jest typowa rekurencja, jak zmodfyfikować program, by była to typowa rekurencja?(tzn. kolejne wywołania w return)
#include <iostream> using namespace std; int suma(int *tab,int rozmiar) { int podziel = rozmiar/2; if (rozmiar==0) return 0; if (rozmiar==1) return tab[0]; static int razem; razem+=tab[podziel]; for (int i=podziel; i<rozmiar-1; i++) { tab[i]=tab[i+1]; } return tab[podziel]+suma(tab, rozmiar-1); } int main() { int tab[10]={1,2,3,4,5,6,7,8,9,10}; cout << suma(tab, 4) << endl; return 0; }
Zauważyłem rownież, że dla rozmiarów
-3 mam wynik 7 zamist 6
-4 wynik 13 zamiast 9
Mogę sie więc domyślać, że zamiast ostatniego elementu dodaje mi się element, który został "obcięty" jako pierwszy tzn dla 3 mam (2+3+2 zamiast 2+3+1), a dla 4 (3+2+4+4 zamiast 3+2+4+1).
Pomocy! :)