Program fibo2.c ilustruje mechaniczne eliminowanie rekursji przy pomocy stosu.
Wzorując się na programie fibo2.c przekształcić następujące rekursywne procedury na iteracyjne (ze stosem):
int asilnia(int n, a) { if (n < 2) { return a; } else { return asilnia(n - 1, n*a); } int silnia(int n) { return asilnia(n, 1); }
fib(5) = 8 fib(4) = 5 fib(3) = 3 fib(2) = 2 fib(1) = 1 fib(0) = 1 fib(1) = 1 fib(2) = 2 fib(1) = 1 fib(0) = 1 fib(3) = 3 fib(2) = 2 fib(1) = 1 fib(0) = 1 fib(1) = 1Tzn. każde wywołanie ma być w odzielnej linii, podając argumenty i wynik. Poniżej mają być wywołania rekursywne, z wcięciami pokazującymi poziom rekursji: wszystkie wywołania są wciętę o cztery spacje w stosunku do funkcji wywołującej. Jak przekształcić daną funkcję, tak by wypisać to drzewo. Przy tym chcemy mało zmienić funkcję, ale też chcemy uniknąć wielokrotnego wywoływania danej funkcji.
Wskazówka: zapamiętać argumenty i wyniki na stosie, samo drzewo wypisać w oddzielnej pętli.