Rekurencja - proste pytanko

0

Witam,

Zacząłem się uczyć algorytmów i C++ z książki "Algorytmy struktury danych i techniki programowania"
Mam zadanie 2.1: Musze napisać program, który za pomocą rekurencji odwróci tablicę liczb całkowitych.

Napisałem program, działa, jednak mój tok rozumowania był inny niż autora - moja funkcja jest inna od przykładowej, czy mógłby ktoś z szanownych forumowiczów wytknąć błędy w mojej implementacji?

Z góry dziękuje.

Moja funkcja:

void obroctab(int *tab, int rozmiar, int max)
{
	int z = tab[rozmiar];
	if(rozmiar > 0) obroctab(tab, (rozmiar - 1), max);
	int w = rozmiar - max;
	if(w < 0) w = w*-1;
	tab[w] = z;
}

Rozwiązanie z książki:

void swap(int& a, int& b)
{
  int temp=a;
  a=b;
  b=temp;
}
void odwroc(int *tab, int left, int right)
{
  if(left<right)
  {
    swap(tab[left],tab[right]);
    odwroc(tab,left+1,right-1);
  }
}
0

Rozwiazanie wydaje się ok, ale przekombinowałeś z tym rozmiar i max trochę ;)
W ksiażce zrobili to po prostu troche sprawniej puszczając dwa "wskaźniki" jeden od początku drugi od konca. Ty masz tylko wskaźnik na koniec, a wskaźnik na "początek" sobie wyliczasz.

Reszta kodu jest właściwie identyczna, różnica tylko w tym że oni zamieniają wartościami pary liczb w tablicy a ty sobie kopiujesz całą tablicę na stos i potem dopiero wpisujesz wartości (kopiujesz niejawnie, bo ten stos wynika tu z rekurencji).

0

najpierw zapisujesz cos do zmiennej 'z'
potem sprawdzasz czy aby nie przekroczyłeś rozmiaru tablicy i zaczynasz funkcje od poczatku zmniejszona o 1.Przeanalziujmy :>
mamy tablice '1'/'2'/'3'(3 elementowa)

wywołanie 1 : z = 3
2 : z = 2
3 : z = 1

potem natrafimy na na nastepna linijke kodu :
(max to pewnie maxymalna wielkosc czyli 3 )

1 : w = 0
2 : w = 1
3 : w = 2

nastepna linijka :(zamiane z minusowej na dodatnia juz zrobilem :P)

1 : tab[0] = 3
2 : tab[1] = 2;
3 : tab[2] = 1;

I co chcesz?Masz wszystko dobrze :P(dopiero jak przeanalizowalem to zrozumialem tok myslenia).W programowaniu każde zadanie możesz rozwiązać na miliony sposobów :>

0

Dzięki za pomoc,

Faktycznie rozwiązanie z książki bardziej oszczędza pamięć, a moje robi stos większy.

Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1