Wytłumaczenie działania prostej funkcji rekurencyjnej

0

Cześć, mam bardzo błahe i z pozoru bardzo proste pytanie.
Wykonując rekurencję:

public static void rekurencja(int liczba) {
	if (liczba == 0) {
		return;
	} else {
		System.out.println("Licznik: " + liczba);
		rekurencja(--liczba);
		System.out.println("rekurencja");
		return;
		}
	}

zastanawia mnie dlaczego słowo rekurencja wyświetla się tyle samo razy ile razy ile odwołaliśmy się do metody dla przykładu liczba = 3;

odpowiedź:

3 
2 
1 
rekurencja
rekurencja 
rekurencja

dodanie znaczników <code class="java"> i <code class="none"> - @furious programming

1

Bo masz tę instrukcję, która się nie wykonuje tylko dla liczba==0?

System.out.println("rekurencja");
0

a dlaczego nie robi tego w taki sposób:

3
rekurencja
2
rekurencja
1
rekurencja

No tak, ale nawet w debuggerze jak patrzyłem to wygląda tak:
sprawdza czy liczna jest == 0 jeśli nie przechodzi do else, wypisuje na ekran zmienną i odwołuje się do metody z licznikiem zmniejszonym o 1 i powtarza czynność. Dopiero po if(liczba==0) true wypisuje na ekran rekurencja rekurencja rekurencja

dodanie znacznika <code class="none"> - @furious programming

1

bo wychodzi z funkcji rekurencja i trafia na kolejną instrukcję jaką jest wypisanie słowa rekurencja
potem wychodzi z mniej zagnieżdzonego wywołania funkcji rekurencja i trafia na to kolejną instrukcją wypisania słowa rekurencja

zawsze mnie fascynowało że ludzie nie potrafią zrozumieć tak prostej idei jaką jest rekurencja

3
rekurencja(--liczba);
System.out.println("rekurencja");

Bo najpierw musi zakończyć całą rekurencję i dopiero wypisuje rekurencja.

rekurencja(3)
    wypisz(3)
    rekurencja(2)
        wypisz(2)
        rekurencja(1)
            wypisz(1)
                rekurencja(0)
            wypisz("rekurencja")
        wypisz("rekurencja")
    wypisz("rekurencja")
3
2
1
rekurencja      <--- to jest z rekurencja(1)
rekurencja      <--- to jest z rekurencja(2)
rekurencja      <--- to jest z rekurencja(3)

dodanie znaczników <code class="none"> - @furious programming

0

Dziękuję, już rozumiem

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