Zadanie SPOI, Ciekawa wylicznka, rekurencja

0

Witam,
rozwiązałem zadanie z "ciekawa wylicznka" ze SPOI ale byłem ciekawy jak można inaczej rozwiązać i znalazłem pewne rozwiązanie ale nie rozumiem do końca jego działania

 #include <iostream>
using namespace std;

void f(int k) {
if(k>2) f(k/2+k%2-1);
cout << 6-k%2;
}

int main() {
   int k; cin >> k; f(k);
}

Kod pochodzi ze strony "matematyka.pl" dodany przez użytkownika flashion .

Wiem że jest to funkcja rekurencyjna, ale niestety z braku wystarczającej wiedzy nie mogę do końca zrozumieć jego działania
powiedzmy że do funkcji przekazuję liczbę 10, 10 jest większe od 2 więc zostaje wywołana funkcja dla argumentu 4 ponownie zostaje wywołana ta funkcja bo argument jest większy od 2 po tym obiegu warunek nie jest spełniony i dopiero wartośc jest wypisywana. Moje rozumowanie jest błędne na pewno, ale zupełnie nie wiem gdzie

4

Nie bierzesz pod uwagę, że po ifie nie ma returna, więc wszystkie couty polecą przy powracaniu z kolejnych funkcji.

2

Bo przecież funkcja nie kończy się wywołaniem rekurencji! Każde z wywołań tej funkcji coś wypisze! Tylko niejako w odwrotnej kolejności, bo najpierw wypisze "najniższe" zagnieżdżenie funkcji i potem będzie wracać w górę stosu wypisując wyniki.

0 użytkowników online, w tym zalogowanych: 0, gości: 0