Kwalifikacja: EE8 - Kwalifikacja EE8
Zawód: Technik informatyk
W języku C/C++ po wywołaniu funkcji cout << s(4) uzyskano wynik liczbowy
int s (int n) {if (n>1) return n*s(n-1); else return 1;}
int s (int n) {if (n>1) return n*s(n-1); else return 1;}
Odpowiedzi
Informacja zwrotna
Odpowiedź 24 jest jak najbardziej poprawna. Funkcja s(n) liczy silnię liczby n, co znaczy, że zwraca iloczyn wszystkich liczb całkowitych od 1 do n. Dla s(4) wszystko zaczyna się od tego, że sprawdza, czy n (czyli 4) jest większe niż 1. I faktycznie jest! Więc potem wywołuje s(3). Tak to się kręci, aż dojdziemy do 1 – wtedy funkcja zwraca 1. Potem następuje mnożenie: 4 * s(3), a s(3) to 3 * s(2), i tak dalej. Na końcu dostajemy 4 * 3 * 2 * 1, co daje 24. Zrozumienie tego wszystkiego jest mega ważne, bo rekurencja to jedna z podstaw programowania w C/C++. Silnia przydaje się wszędzie – w statystyce, informatyce, a nawet w kombinatoryce, gdzie obliczamy permutacje i kombinacje.
Wybór innych opcji, jak 4, 1 czy 120, może wynikać z typowych pomyłek w myśleniu o funkcjach rekurencyjnych. Odpowiedź 4 można pomylić z prostym wywołaniem funkcji bez zrozumienia, że to rekurencja. Właściwie to nie uwzględnia tego, że s(n) robi wiele mnożeń, a nie zwraca n tylko raz. Z kolei 1 może być wynikiem fałszywego przekonania, że funkcja zawsze zwraca 1, a to nie jest zgodne z jej definicją. A 120 pewnie wzięło się z pomyłki w obliczeniu silni dla n=5, co zdarza się często, gdy ktoś nie zrozumie, jak to działa. Ważne, żeby pamiętać, że funkcje rekurencyjne są złożone i nie działają jak zwykłe, a silnia rośnie bardzo szybko – nawet niewielka zmiana w n prowadzi do dużych różnic w końcowym wyniku.