zajętość pamięci [C]

0

Witam,

Dopiero wkraczam w arkana programowania. W kilku podręcznikach spotkałem się ze zdaniem, że jeśli to możliwe to lepiej nie używać funkcji rekurencyjnych. Stąd moje pytanie: jaki wpływ ma zastosowanie funkcji rekurencyjnej na zajetość pamięci komputera i dlaczego ?

Z góry dzięki za pomoc.

0

Rekurencja to berdzo wredna rzecz, zwłaszcza dla trybu rzeczywistego procka, gdzie stos programu nie przekracza 64kB. Każde wywołanie funkcji zmniejsza wolną przestrzeń na stosie. Poza tym... Porównaj szybkośc działania (najprostsza silnia)...

unsigned long silnia_iter(unsigned n){
  unsigned long i=1;
  while(n>1)i*=(n--);
  return i;
}

unsigned long silnia_rek(unsigned n){
  return ((n>1)?n*silnia_rek(n-1):1);
}
0

po prostu - funkvja rekurencyjna wywolujac sama siebie musi odkladac przy kazdym wywolaniu na stosie wyniki czastkowe - w dosc szybkim czasie powoduje to zapelnienie stosu i "wywalenie" programu. Dlatego tez literatura zaleca unikania rekurencji jak tylko to mozliwe, a w sytuacjach gdy jest to nieodzowne zminimalizowanie ilosci wywolan. Zapewni to znacznie wieksza stabilnosc programu.

ps. dla funkcji silnia w wersji iteracyjnej moj komputerek (stary grzmot) liczy do 1500!, natomiast dla rekurencyjnej wywala sie juz przy 10!

0

.... , a w sytuacjach gdy jest to nieodzowne zminimalizowanie ilosci wywolan.

Nie ma takich sytuacji. Kazda rekurencje da sie przerobic na petle. :)

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