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:
http://ideone.com/GTuUZy
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! :)