Objaśnienie instrukcji objasnienie

0

Witam, mam pewna funkcje do ktorej przekazuje przy wywołaniu argumenty a i b

System.out.println(NWD(50,65));

public static int NWD (int a, int b) {

  if (b == 0) {
      return a;
  } else
      return NWD(b, a%b);
}  

wylicza NWD i zwraca wartosc, ale nie za bardzo rozumiem tego wiersza kodu, else return NWD(b,a%b); rozumiem ze zwracam metode z argumentami b oraz reszta a%b?

1

Może nie tyle zwracasz metodę z argumentami b oraz reszta a%b co wywołujesz tę metodę i zwracasz to co ona zwróci. Ta metoda koniec końców zwróci a.
Przykład bo tak łatwiej.
a = 12, b = 8
NWD (12, 8)
8 =/= 0 więc wywołujesz NWD(8, 12%8) = NWD (8, 4)
4 =/= 0 więc wywołujesz NWD(4, 8%4) = NWD (4, 0)
b == 0 => zwracasz a czyli 4.
Odpal sobie to w debuggerze i zobacz call stack. W pewnym momencie metoda zwraca a i ta wartość znajdzie się w metodzie która ją wywołała w gałęzi z else i zwróci to "wyżej" do metody która ją wywołała itd. Koniec końców zwrócone to zostanie z "pierwszego" wywołania metody.
Mam nadzieję, że cokolwiek zrozumiałeś. Tak jak napisałem, odpal debugger i tam to prześledź bo tak chyba najłatwiej.

0

Juz rozumiem, dzieki za pomoc.

0

Dość ważne jest powiedzieć, że jest to rekurencja czasem, rzadziej, zwana rekursją

Wrzuć słówko w wyszukiwarki. To Ci wiele naświetli

1

@Virus_:

return NWD(b, a%b);

to jest to samo co

int result = NWD(b, a%b);
return result;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.