W jaki sposób pierwotna funkcja jest odpowiedzialna za swoje kopie?

0

Uczę się rekurencji i mam taki problem. Mianowicie rekurencja to funkcja, która wywołuje samą siebie(tworzy swoje kopie), aż do napotkania przypadku bazowego. Każda kolejna kopia jest wywoływana przez kopie poprzedzającą. Tylko teraz jest taki problem. Mianowicie w jaki sposób pierwotna funkcja odpowiada za te kopie, które będą tworzone do momentu napotkania przypadku bazowego

4

no nie jest odpowiedzialna
jak masz


void (int par){
if(par>0)
  funkcjax(par-1);
  return;
}


funkcjax(2);

to tak samo jest to wyowływane jakbyś miał


void funkcjax(int par){
if(par>0)
  funkcjay(par-1);
  }
  
}

void funkcjay(int par){
if(par>0)
  funkcjaz(par-1);
  }
}


void funkcjaz(int par){
  return;
}

funkcjax(2);
5

Każde wywołanie funkcji tworzy osobną ramkę (ang. stack frame) na stosie. Każde jedno wywołanie funkcji to osobna ramka.
W ramce zawarte są zmienne lokalne funkcji, parametry (formalne => aktualne) oraz adres powrotu (dzięki temu funkcja wie z której ramki została wywołana i gdzie ma wrócić).
Wywołania rekurencyjne tworzą na stosie kolejne ramki. W momencie dotarcia do przypadku bazowego rekursji ramki są zdejmowane ze stosu i obliczany jest wynik ostateczny…

Przykład:
https://www.embecosm.com/appnotes/ean3/html/ch02s03s06.html

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