Prośba o wyjaśnienie działania poniższego kodu

0
    public static void nLines(int n) {
        if(n > 0) {
            nLines(n / 2);
            System.out.println(n % 2);
        }
    }
}

Mam rekurencyjne wywołanie metody, która odpowiada za rozbicie wprowadzonej wartości z systemu dziesiętnego na binarny. Sprawdzałem w debuggerze jak to wygląda jeśli chodzi o przepływ. Wiec wprowadzam wartość, warunek podstawowy sprawdza czy jest większa od 0, jesli jest to wywołuje rekurencyjnie metodę nLines która dzieli mi n przez 2, i tak aż wartość n osiągnie wartość 0, wtedy program przeskakuje do wiersza z wywołaniem metody której przekazuje jako argument n % 2, tylko nie rozumiem dlaczego ta metoda zaczyna obliczać mi resztę z dzielenia, wartości od 1 do 23, skoro nLines dzieliło mi ta wartość od 23 do 0.

2

No to chyba słabo sprawdziłeś w tym debuggerze, bo debuger pokazuje dokładnie jak zaczyna sie tworzyc stos wywołań. No ale rozpiszmy to ręcznie:

  1. Zaczynamy np. z n = 4
  2. 4 > 0 więc idziemy dalej
  3. Napotykamy wywołanie rekurencyjne funkcji z n/2, więc wskakujemy niżej z n = 2
  4. 2 > 0 wiec idziemy dalej
  5. Napotykamy wywołanie rekurencyjne funkcji z n/2 więc wkakujemy niżej z n = 1
  6. 1 > 0 wiec idziemy dalej
  7. Napotykamy wywołanie rekurencyjne funkcji z n/2, więc wskakujemy niżej z n = 0
  8. 0 nie jest większe od 0, więc na tym poziomie nie wchodzimy do ifa, tylko go przeskakujemy i trafiamy na koniec funkcji, więc wracamy z niej do miejsca skąd była wywołana
  9. Wywołanie funkcji rozpoczęte w punkcie 7 się skończyło, więc przechodzimy do kolejnej linijki która wypisuje nam 1%2
  10. Trafiamy na koniec ifa i koniec funkcji, więc wracamy z niej do miejsca skąd była wywołana
  11. Wywołanie funkcji rozpoczęte w punkcie 5 się skończyło, więc przechodzimy do kolejnej linijki która wypisuje nam 2%2
  12. Trafiamy na koniec ifa i koniec funkcji, więc wracamy z niej do miejsca skąd była wywołana
  13. Wywołanie funkcji rozpoczęte w punkcie 3 się skończyło, więc przechodzimy do kolejnej linijki która wypisuje nam 4%2
  14. Trafiamy na koniec ifa i koniec funkcji, więc wracamy z niej do miejsca skąd była wywołana, czyli gdzieś do maina

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