KWALIFIKACJA INF2 + INF3 - STYCZEŃ 2013

PYTANIE NR 27.
Przeanalizuj fragment programu i określ, jaki rodzaj algorytmu realizuje?
Ilustracja przedstawia fragment kodu w języku programowania C, który realizuje algorytm Hornera.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Algorytm iteracyjny wykonuje powtarzanie kroków w pętli (np. for/while), zwykle kontrolując zakończenie warunkiem w pętli. W przeciwieństwie do tego algorytm rekurencyjny opiera się na samowywołaniu funkcji/procedury. Jeśli w analizowanym kodzie widać pętlę i brak samowywołań, właściwa jest iteracja.

Pełne wyjaśnienie:

Określenie, czy dany fragment programu realizuje algorytm iteracyjny czy rekurencyjny, sprowadza się do rozpoznania mechanizmu sterowania przebiegiem obliczeń.

Algorytm iteracyjny powtarza pewien zestaw instrukcji, korzystając z konstrukcji pętli (np. for, while, do...while) albo równoważnych mechanizmów (np. ręczna aktualizacja indeksu i skok w logice programu). Zakończenie pracy wynika z warunku pętli lub z przerwania (np. gdy osiągnięto oczekiwany stan).

Algorytm rekurencyjny działa przez wywoływanie funkcji (lub procedury) przez samą siebie – bezpośrednio lub pośrednio. Kluczowe elementy to: przypadek bazowy (warunek stopu) oraz krok rekurencyjny (zmniejszanie problemu). Taki kod zwykle wykorzystuje stos wywołań.

W tej odpowiedzi poprawne jest wskazanie "Iteracyjny.", gdy w analizowanym fragmencie dominują pętle i nie ma samowywołań. Odpowiedź "Rekurencyjny." byłaby właściwa tylko wtedy, gdy funkcja/procedura wywołuje samą siebie. Odpowiedź "Podstawieniowy." nie opisuje standardowo techniki sterowania algorytmem w tym sensie (iteracja/rekurencja), więc jest myląca jako kategoria. Odpowiedź "Sortujący." dotyczy celu algorytmu (sortowanie), a nie sposobu realizacji; algorytm sortowania może być zarówno iteracyjny, jak i rekurencyjny, więc sama etykieta "sortujący" nie odpowiada na pytanie o rodzaj (technikę) wykonania.

Wskazówka egzaminacyjna: najpierw sprawdź, czy występuje pętla, a potem poszukaj (bezpośredniego lub pośredniego) wywołania tej samej funkcji. To najszybszy sposób odróżnienia iteracji od rekurencji.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Algorytm iteracyjny to taki, w którym te same kroki są powtarzane w pętli (np. for, while). Rozpoznasz go po tym, że sterowanie wraca do początku pętli, a zakończenie wynika z warunku pętli lub przerwania działania.
Algorytm rekurencyjny opiera się na tym, że funkcja/procedura wywołuje samą siebie (bezpośrednio lub pośrednio). Zawsze powinien mieć przypadek bazowy (warunek stopu) i krok, który zmniejsza problem, aby rekurencja się zakończyła.
Najpierw szukaj słów-kluczy pętli (np. for/while) lub powtarzania bloku kodu. Potem sprawdź, czy nazwa funkcji pojawia się wewnątrz jej własnego ciała jako wywołanie. Pętla bez samowywołania sugeruje iterację.
"Sortujący" opisuje cel (co algorytm robi), a "iteracyjny/rekurencyjny" opisuje technikę wykonania (jak działa sterowanie). Ten sam algorytm sortowania może być zapisany iteracyjnie albo rekurencyjnie, więc kategoria "sortujący" nie rozstrzyga typu w tym sensie.
Typowe oznaki to: wywołanie funkcji o tej samej nazwie w jej wnętrzu, sprawdzanie warunku bazowego (np. gdy n == 0) oraz operacje "po wywołaniu" (np. składanie wyniku). Często widać też pracę na mniejszym problemie (n-1, połowa tablicy).
Nie zawsze, ale często bywa bardziej przewidywalny pod względem pamięci, bo nie zużywa stosu wywołań tak jak rekurencja. Rekurencja może być czytelniejsza dla pewnych problemów (np. drzewa), jednak bez optymalizacji może powodować większy narzut i ryzyko przepełnienia stosu.
Warto unikać rekurencji przy dużej liczbie kroków (np. przetwarzanie tysięcy elementów), bo głęboki stos może prowadzić do błędów wykonania lub spadku wydajności. W backendzie często bezpieczniej jest zastosować iterację i kontrolować limity zasobów.
Częsty błąd to uznanie, że "skoro jest funkcja, to jest rekurencja". Inny błąd to pomylenie rodzaju algorytmu z jego zadaniem (np. sortowanie). Warto zawsze sprawdzić, czy występuje samowywołanie oraz gdzie znajduje się warunek zakończenia.
Nie. Funkcja anonimowa (np. w JavaScript) to tylko sposób zapisu funkcji. Rekurencja pojawia się dopiero wtedy, gdy funkcja wywołuje samą siebie (albo następuje pośredni cykl wywołań). W praktyce wiele funkcji anonimowych jest używanych w iteracji, np. przy przetwarzaniu tablic.
Ćwicz czytanie krótkich fragmentów kodu i zaznaczaj: (1) pętle, (2) wywołania funkcji, (3) warunek stopu. Rozwiązuj zadania, w których ten sam problem jest zapisany raz iteracyjnie, a raz rekurencyjnie—łatwiej wtedy wychwycić różnice w sterowaniu.
info

Około 62% zdających odpowiada poprawnie na to pytanie. średnie

Specjaliści zwracają uwagę: "Algorytm iteracyjny wykonuje powtarzanie kroków w pętli (np. for/while), zwykle kontrolując zakończenie warunkiem w pętli."

Źródła:

  • Wikipedia (PL) – "Iteracja" (informatyka): https://pl.wikipedia.org/wiki/Iteracja (dostęp: 2026-02-27)
  • Wikipedia (PL) – "Rekurencja (informatyka)": https://pl.wikipedia.org/wiki/Rekurencja_(informatyka) (dostęp: 2026-02-27)

Materiały:

  • Podręczniki i skrypty z podstaw algorytmiki (iteracja i rekurencja)
  • Dokumentacja języka używanego na zajęciach (sekcja pętle i funkcje)
  • Zadania maturalne/egzaminacyjne z rozpoznawania konstrukcji iteracyjnych i rekurencyjnych

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego