• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie Jezyk C

Object Storage Arubacloud
0 głosów
267 wizyt
pytanie zadane 28 sierpnia 2022 w C i C++ przez benny13 Obywatel (1,150 p.)

Witam, mam problem z następującym zadaniem:

Wypisz wartości wyświetlone na ekranie po wykonaniu następującego programu:

#include <stdio.h>
void f(int x){
if(x<3)f(x+1);
printf("%d\n", x);
if(x<5)f(x+2);
}
int main(void){
f(2);
return 0;
}

Czemu w tym przypadku program kolejno wypisuje wartości: 3,5,2,4,6? Niestety nie mogę do tego dojść, choć domyślam się, że chodzi tu o funkcje rekurencyjne. Czy byłby ktoś wstanie wyjaśnić krok, po kroku skąd biorą się wartości wypisywane przez program? Z góry bardzo dziękuję :)

2 odpowiedzi

+1 głos
odpowiedź 29 sierpnia 2022 przez jankustosz1 Nałogowiec (35,880 p.)
Wrzucamy 2 do funkcji, 2<3 więc wywołujemy się dla trójki, 3<3 jest fałszem wiec wypisujemy 3, 3<5 więc wywołujemy się dla 5, 5<3 jest fałszem, więc wypisujemy 5, 5<5 też jest fałszem. Wracamy więc do trójki, następnie dwójki i wykonujemy kolejną instrukcję czyli wypisanie dwójki następnie odpalamy się od czwórki, wypisujemy czwórkę i następnie odpalamy się dla 6.
komentarz 29 sierpnia 2022 przez benny13 Obywatel (1,150 p.)
Bardzo dziękuję! :)
+1 głos
odpowiedź 29 sierpnia 2022 przez Mate0 Nowicjusz (210 p.)

Dobrze się domyślasz, bo to właśnie zasługa rekurencyjnego wywołania funkcji f(). Teraz analizując wszystko po kolei:

Przy jej pierwszy wywołaniu w argumencie podajesz liczbę 2.

W funkcji pierwszym if-ie spełniony zostaje warunek 2<3, więc funkcja zostaje wywołana ponownie dla liczby 2+1 = 3 (1-szy rząd rekurencji).

W tym wywołaniu pierwszy if nie zostaje spełniony, bo 3<3 nie jest prawdą i funkcja f() nie jest ponownie wywoływana. Na ekranie drukowana jest liczba 3.

W następnym if-ie spełniony jest warunek 3<5, więc funkcja ponownie jest wywoływana rekurencyjnie dla liczby 3+2 = 5 (2-gi rząd rekurencji).

Tutaj warunek 5<3 nie jest również spełniony, więc nie ma kolejnego wywołania funkcji f(). Na ekranie drukowana jest liczba 5.

Kolejny warunek też nie jest spełniony, bo 5<5, więc funkcja się kończy i... wracamy do 1-szego rzędu rekurencji. To wywołanie od razu również się kończy i wracamy do podstawowego wywołania funkcji.

Na ekranie drukowana jest liczba 2.

Tu wchodzimy do drugiego if-a (x<5), gdzie analogicznie jak wyżej otrzymujemy liczby 2+2=4 oraz 4+2=6. Chyba już wszystko jasne! Pozdrawiam!

komentarz 29 sierpnia 2022 przez benny13 Obywatel (1,150 p.)
Bardzo dziękuję! :)
komentarz 30 sierpnia 2022 przez benny13 Obywatel (1,150 p.)

@Mate0, Niestety nadal nie mogę zrozumieć czemu po braku spełnienia warunku 5<5 wracamy do 1-szego rzędu rekurencji a potem do podstawowego wywołania funkcji :(

Podobne pytania

+1 głos
1 odpowiedź 637 wizyt
pytanie zadane 10 grudnia 2015 w C i C++ przez Bazyliszek Nowicjusz (130 p.)
+1 głos
1 odpowiedź 385 wizyt
pytanie zadane 6 stycznia 2021 w C i C++ przez monia79wawa Nowicjusz (190 p.)
0 głosów
3 odpowiedzi 1,000 wizyt
pytanie zadane 27 lutego 2018 w C i C++ przez Ala123456 Użytkownik (760 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...