174 Rozdział 6. Derekursywatp 6.4.
to dlaczego nie wspomnieliśmy o tym wcześniej, wprowadzając na dodatek nowe nazewnictwo?
Odpowiedź zabrzmi dość przewrotnie: te dwa typy rektirencji są i nie są zarazem takie same. Wprowadzając nowy termin, ową rekurencję z parametrem dodatkowym, miałem na uwadze pewną klasę zagadnień natury numerycznej lub quasi-numerycznej Wyrażając to jeszcze dokładniej: grupę programów, które zwracają „namacalny" wynik, np. liczbę, tablicę, ciąg znaków etc. Ten w'ynik jest dostarczany poprzez parametr dodatkowy i stąd pochodzi nazwa. Natomiast programem terminalnym może być procedura hemoi, która nic „dotykalnego” oprócz przepisu na rozwiązanie łamigłówki - nie dostarcza! Poprzestając na tym wyjaśnieniu przekształćmy wreszcie funkcję silnia na jej postać rektirencyjną. Niespodzianek nie powinno być żadnych - tłumaczenie jest niemal automatyczne:
int si 1 nia_it(int x, int rps=l)
i
while t x!=0)
I
res=x* res; x—;
)
return res;
I
W tym paragrafie zapoznamy się z nową metodą derektirsywacji, która niestety jest dość kontrowersyjna. Zmuszeni bowiem będziemy do swoistego zaprze- i czenia wielkim regułom programowania strukturalnego i na dodatek propono- I wane rozwiązania nie będą miały nic wspólnego z „estetycznymi” wymogami I programowania. Powodem tego jest operowanie pojęciami o bardzo niskim poziomie abstrakcji, bardzo zbliżonymi do zwykłego języka asemblera. Zasada jest prosta: wiedząc, jak kompilator traktuje wywołania rekurencyjne, będziemy usiłowali robić to samo, lecz próbując po drodze nieco upraszczać jego zadanie. I Mamy bowiem do dyspozycji coś, czego brakuje współczesnym kompilatorom: I naszą inteligencję. Kompilator jest zwykłym programem postępującym auto- I matycznie: plik tekstowy zawierający program w języku wysokiego poziomu jest zamieniany na maszynową reprezentację, która możliwa jest do wykonania przez procesor komputera. Kompilator rozpatruje programy pod kątem ich składni i nie jest raczej w stanie analizować ich sensu i celu. My natomiast całą tę wiedzę posiadamy i stąd właśnie wziął się pomysł metody derekursywacji z wykorzystaniem stosu.