KWALIFIKACJA MED7 - CZERWIEC 2019

PYTANIE NR 26.
Funkcja f(n) = n*f(n-1) dla n>1 w przeciwnym wypadku f(n) = 1 jest przykładem
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Zapis f(n)=n·f(n-1) odwołuje się do wartości funkcji dla mniejszego argumentu (n-1), więc jest to definicja rekurencyjna.
Warunek f(n)=1 dla n≤1 pełni rolę przypadku bazowego (warunku stopu). Taki schemat odpowiada m.in. obliczaniu silni, a nie potęgi.

Pełne wyjaśnienie:

W podanym zapisie funkcja jest zdefiniowana poprzez odwołanie do samej siebie: aby policzyć f(n), trzeba znać f(n-1). To jest właśnie rekurencja (definicja rekurencyjna). Jednocześnie podano przypadek bazowy (warunek stopu): "w przeciwnym wypadku f(n)=1", czyli dla n≤1. Bez takiego warunku rekurencja nie miałaby punktu zakończenia i prowadziłaby do nieskończonych wywołań.

Ten schemat jest klasyczny dla silni: n! spełnia zależność n! = n·(n−1)!, a 1! = 1. Dlatego wartości rosną jak iloczyn kolejnych liczb naturalnych.

Dlaczego pozostałe odpowiedzi są niepoprawne?

  • "obliczania n–tej potęgi liczby n." – potęgowanie n^n nie wynika z relacji f(n)=n·f(n-1). Dla potęgowania typowy związek rekurencyjny miałby postać f(n)=n·f(n-1) tylko wtedy, gdy n jest stałą podstawą, a zmienia się wykładnik; tutaj n zmienia się w każdym kroku, więc to inny problem.
  • "iteracji." – iteracja oznacza realizację powtórzeń pętlą (np. for/while). W treści nie ma pętli, tylko zależność od poprzedniego wywołania; to cecha rekurencji, nie iteracji. Co ważne, rekurencję da się często przepisać na iterację, ale nie są to pojęcia tożsame.
  • "obliczania wyrazu ciągu Fibonacciego." – typowa definicja Fibonacciego odwołuje się do dwóch poprzednich wyrazów (np. F(n)=F(n-1)+F(n-2)) oraz ma dwa przypadki bazowe. W zadaniu występuje mnożenie przez n i tylko jedno odwołanie do n-1, więc to nie jest Fibonacci.

Wskazówka egzaminacyjna: gdy widzisz zapis f(n) zależne od f(n-1), f(n-2) itd. wraz z warunkiem dla małych n, najpierw rozpoznaj technikę (rekurencja), a dopiero potem kojarz ją z konkretnym przykładem (np. silnia).

Dodatkowe pytania

Dodatkowe pytania (FAQ):

Rekurencja to technika, w której funkcja wywołuje samą siebie, aby rozwiązać mniejszą wersję problemu.

Wymaga przypadku bazowego (zatrzymania) oraz kroku rekurencyjnego (sprowadzenia n do n-1, n-2 itd.).

Warunek stopu (przypadek bazowy) zapobiega nieskończonym wywołaniom funkcji.

Bez niego program będzie wciąż wywoływał kolejne poziomy rekurencji, aż do błędu, np. przepełnienia stosu.

To rekurencja, gdy wartość dla n jest opisana przez wartość tej samej funkcji dla mniejszego argumentu, np. f(n-1) lub f(n-2).

Dodatkowo zwykle pojawia się warunek dla małych n, np. f(1)=1.

Taki zapis odpowiada silni, czyli n!.

Wynika to z zależności n! = n·(n−1)! i warunku 1! = 1. Każdy krok mnoży przez kolejną liczbę naturalną, tworząc iloczyn 1·2·…·n.

Rekurencja używa wywołań funkcji (funkcja woła samą siebie), a stan obliczeń jest przechowywany na stosie wywołań.

Iteracja używa pętli (for/while) i zwykle zużywa mniej pamięci.

Nie zawsze. Rekurencja bywa czytelniejsza, gdy problem ma strukturę naturalnie rekurencyjną (drzewa, dziel-i-zwyciężaj).

Jednak może być mniej wydajna przez narzut wywołań i ryzyko przepełnienia stosu. W praktyce dobiera się metodę do zadania i ograniczeń.

Najczęstsze błędy to: brak przypadku bazowego, zły warunek stopu (np. n>1 vs n>=1), oraz mylenie rekurencji z iteracją.

W algorytmach pojawia się też nieefektywna rekurencja bez zapamiętywania wyników (memoizacji).

Fibonacci zwykle ma postać F(n)=F(n-1)+F(n-2) i dwa przypadki bazowe.

W tym zadaniu jest mnożenie przez n oraz tylko jedno odwołanie do n-1, więc schemat i znaczenie są inne (bliżej silni niż Fibonacciego).

Każde wywołanie rekurencyjne tworzy nową ramkę na stosie (lokalne zmienne, adres powrotu).

Głęboka rekurencja zwiększa zużycie pamięci i może skończyć się błędem przepełnienia stosu, szczególnie w systemach o małych zasobach.

Ćwicz rozpoznawanie: (1) czy jest odwołanie do f(n-1)/f(n-2), (2) gdzie jest przypadek bazowy, (3) czy wzór pasuje do znanych przykładów (silnia, Fibonacci).

Warto umieć też przepisać prostą rekurencję na pętlę i wskazać plusy/minusy obu metod.

info

To pytanie poprawnie rozwiązuje 59% zdających egzamin. średnie

W praktyce zawodowej kluczowe jest to, że zapis f(n)=n·f(n-1) odwołuje się do wartości funkcji dla mniejszego argumentu (n-1), więc jest to definicja rekurencyjna.Warunek f(n)=1 dla n≤1 pełni rolę przypadku bazowego (warunku stopu).

Źródła:

  • Wikipedia (PL): "Rekurencja (informatyka)" – https://pl.wikipedia.org/wiki/Rekurencja_(informatyka) (dostęp: 2026-02-24)
  • Wikipedia (PL): "Silnia" – https://pl.wikipedia.org/wiki/Silnia (dostęp: 2026-02-24)
  • Wikipedia (PL): "Ciąg Fibonacciego" – https://pl.wikipedia.org/wiki/Ci%C4%85g_Fibonacciego (dostęp: 2026-02-24)

Materiały:

  • Dokumentacja języka programowania używanego na zajęciach (sekcja o funkcjach i wywołaniach rekurencyjnych)
  • Podręcznik do podstaw algorytmiki: rozdział o rekurencji, iteracji i przykładzie silni
  • Materiały z analizy złożoności i pamięci: omówienie stosu wywołań i kosztów rekurencji

Aktualizacja pytania: 03.04.2026



Aktualizacja pytania: 03.04.2026
📡 Brak połączenia internetowego