KWALIFIKACJA INF3 - STYCZEŃ 2015

PYTANIE NR 30.
Odwołanie funkcji do samej siebie to
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Odwołanie (wywołanie) funkcji do samej siebie nazywa się rekurencją. W rekurencji kluczowy jest warunek zakończenia, aby wywołania nie trwały w nieskończoność. Iteracja oznacza powtarzanie instrukcji w pętli, a hermetyzacja i dziedziczenie to pojęcia z programowania obiektowego.

Pełne wyjaśnienie:

Rekurencja to technika programistyczna, w której funkcja (lub procedura/metoda) wywołuje samą siebie, zwykle po to, aby rozwiązać problem poprzez rozbicie go na mniejsze podproblemy tego samego typu.

W praktyce każda poprawnie zaprojektowana rekurencja powinna mieć dwa elementy:

  • przypadek bazowy (warunek zakończenia) – sytuację, w której funkcja nie wywołuje się ponownie i zwraca wynik,
  • krok rekurencyjny – część, w której funkcja wywołuje się dla "mniejszego" lub prostszego argumentu.

Dlaczego pozostałe odpowiedzi są niepoprawne?

  • Iteracja oznacza wielokrotne wykonanie fragmentu kodu, najczęściej przy użyciu pętli (np. for/while). To alternatywny sposób rozwiązywania wielu problemów, ale nie jest to "wywołanie funkcji do samej siebie".
  • Hermetyzacja (często spotyka się też termin "enkapsulacja") dotyczy ukrywania danych/implementacji i udostępniania kontrolowanego interfejsu w programowaniu obiektowym. Nie opisuje mechanizmu wywołań funkcji.
  • Dziedziczenie to relacja między klasami w OOP, w której jedna klasa przejmuje cechy/informacje po innej. Również nie jest to samowywołanie funkcji.

W kontekście aplikacji internetowych rekurencja pojawia się m.in. przy przetwarzaniu struktur drzewiastych (np. DOM HTML) lub zagnieżdżonych danych (np. JSON). Warto pamiętać o ryzyku zbyt głębokiej rekurencji (przepełnienie stosu) i o tym, że część zadań da się zapisać iteracyjnie.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Rekurencja to sytuacja, gdy funkcja wywołuje samą siebie, aby rozwiązać problem przez podproblemy tego samego typu. Poprawna rekurencja musi mieć przypadek bazowy (zakończenie) i krok rekurencyjny (kolejne wywołanie z "mniejszym" argumentem).
Bez warunku zakończenia funkcja będzie wywoływać się w nieskończoność, aż program przerwie działanie (np. przez przepełnienie stosu). Przypadek bazowy jest więc mechanizmem zatrzymującym dalsze wywołania i pozwala zwrócić wynik.
Iteracja powtarza instrukcje za pomocą pętli (for/while), a rekurencja powtarza obliczenia przez kolejne wywołania funkcji. Obie techniki mogą rozwiązywać podobne problemy, ale rekurencja zużywa stos wywołań, a iteracja zwykle działa w stałej pamięci.
Rekurencja bywa wygodna przy strukturach drzewiastych i zagnieżdżonych, np. przeglądaniu drzewa katalogów, elementów DOM lub danych JSON. Kod bywa wtedy krótszy i bardziej naturalny, o ile kontrolujesz głębokość i masz jasny przypadek bazowy.
To sytuacja, gdy zbyt wiele zagnieżdżonych wywołań funkcji zajmuje pamięć stosu (stack). Najczęściej wynika z braku lub błędnego warunku zakończenia albo z bardzo dużej głębokości rekurencji. Rozwiązaniem bywa poprawa warunku lub zapis iteracyjny.
W kodzie widać, że funkcja w swoim ciele wywołuje samą siebie (po nazwie lub przez referencję). Dodatkowo powinna istnieć gałąź warunkowa, która kończy rekurencję, np. dla wartości granicznej argumentu. Bez tego ryzykujesz nieskończone wywołania.
Nie. Rekurencja jest ogólną techniką programowania i algorytmiki, niezależną od paradygmatu. Pojęcia obiektowe to m.in. dziedziczenie i hermetyzacja (enkapsulacja). Rekurencja dotyczy mechanizmu wywołań funkcji, a nie relacji między klasami.
Obie techniki służą do "powtarzania" działań, więc łatwo o skojarzenie. Różnica jest w mechanizmie: pętla powtarza blok instrukcji, a rekurencja tworzy kolejne wywołania funkcji. Na pytaniach definicyjnych trzeba zwracać uwagę na frazę "funkcja wywołuje samą siebie".
W webie rekurencja pojawia się m.in. w przetwarzaniu zagnieżdżonych struktur danych (JSON), budowaniu i analizie drzew (np. menu kategorii), oraz w operacjach na DOM, gdy przechodzisz po elementach potomnych. Warto znać też iteracyjne alternatywy dla wydajności.
Powtórz definicję rekurencji, iteracji oraz podstawowe pojęcia OOP (dziedziczenie, hermetyzacja/enkapsulacja). Przećwicz proste przykłady: silnia, Fibonacci, przejście po drzewie. Zawsze wskazuj przypadek bazowy i krok rekurencyjny.
info

To pytanie poprawnie rozwiązuje 80% zdających egzamin. średnio łatwe

W praktyce zawodowej kluczowe jest to, że odwołanie (wywołanie) funkcji do samej siebie nazywa się rekurencją.

Źródła:

  • Wikipedia (PL): "Rekurencja (informatyka)" – https://pl.wikipedia.org/wiki/Rekurencja_(informatyka) (dostęp: 2026-03-01)
  • Python 3 Documentation: "Compound statements – function definitions" (informacje o wywołaniach funkcji, w tym rekurencyjnych) – https://docs.python.org/3/reference/compound_stmts.html#function-definitions (dostęp: 2026-03-01)
  • MDN Web Docs: "Recursion" (JavaScript) – https://developer.mozilla.org/en-US/docs/Glossary/Recursion (dostęp: 2026-03-01)

Materiały:

  • Dokumentacja języka programowania używanego na zajęciach (sekcja o funkcjach/metodach i wywołaniach)
  • Podręcznik do podstaw algorytmiki (rozdział: rekurencja i iteracja)
  • Ćwiczenia: zamiana rozwiązań rekurencyjnych na iteracyjne i odwrotnie

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego