W pokazanym kodzie zdefiniowano funkcję:
- dla n > 1 zwraca wartość n * s(n-1), czyli wywołuje samą siebie z mniejszym argumentem,
- dla n <= 1 zwraca 1 – to tzw. warunek stopu, bez którego rekurencja nie zakończyłaby się poprawnie.
Tak zdefiniowana funkcja oblicza silnię (factorial) liczby naturalnej: n!. Aby policzyć wynik dla wywołania s(4), można rozpisać kolejne wywołania:
s(4) zwraca 4 * s(3)
s(3) zwraca 3 * s(2)
s(2) zwraca 2 * s(1)
s(1) spełnia warunek n<=1 i zwraca 1
Następnie następuje "odwijanie" rekurencji (powrót z funkcji):
s(2)=2*1=2
s(3)=3*2=6
s(4)=4*6=24
Dlatego poprawny wynik wypisany przez cout << s(4) to 24.
Dlaczego pozostałe odpowiedzi nie pasują?
- 4 wynika z typowego błędu polegającego na utożsamieniu wyniku funkcji z jej argumentem, ale funkcja wykonuje mnożenia rekurencyjne.
- 1 to wartość zwracana tylko w przypadku bazowym (gdy n<=1), a tutaj startujemy od n=4.
- 120 to 5!, więc byłoby poprawne dla wywołania s(5), nie dla s(4).
Wskazówka egzaminacyjna: w zadaniach z rekurencją zawsze sprawdź warunek stopu i policz 2–3 pierwsze rozwinięcia, a potem wykonaj "odwijanie" krok po kroku.