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

JavaScript problem ze zwracaniem wartości przez funkcję rekurencyjną

Cloud VPS
0 głosów
1,124 wizyt
pytanie zadane 27 listopada 2016 w JavaScript przez Bartos Użytkownik (610 p.)

Witam,

napisałem prostą funkcję w JS liczącą największy wspólny dzielnik dwóch liczb algorytmem Euklidesa (za pomocą odejmowania). Problem polega na tym, że funkcja w tej postaci pokazanej poniżej zwraca undefined:

function nwd(a,b)
    {
      var c = a - b;

      if (c == b)
      	return c;

      if (c < b)
        nwd(b,c);
      else
        nwd(c,b);
    }

document.write(nwd(1989,867));

Natomiast gdy wyświetlenie wartości w przeglądarce dodam bezpośrednio wewnątrz funkcji to działa poprawnie:

function nwd(a,b)
    {
      var c = a - b;

      if (c == b) {
      	document.write(c);
      	return false;
      }

      if (c < b)
        nwd(b,c);
      else
        nwd(c,b);
    }

nwd(1989,867);

Jest w stanie ktoś wytłumaczyć dlaczego tak się dzieje?

1 odpowiedź

+2 głosów
odpowiedź 27 listopada 2016 przez Comandeer Guru (607,060 p.)
wybrane 27 listopada 2016 przez Bartos
 
Najlepsza

return nwd – inaczej funkcja przecież nie zwróci tego, co zwróci wywołanie nwd.

komentarz 27 listopada 2016 przez Bartos Użytkownik (610 p.)
Nooo tak, dzięki :)

Podobne pytania

0 głosów
1 odpowiedź 392 wizyt
pytanie zadane 26 marca 2017 w JavaScript przez Mimoid Użytkownik (760 p.)
0 głosów
0 odpowiedzi 2,402 wizyt
pytanie zadane 29 stycznia 2017 w Algorytmy przez Corvo Nowicjusz (180 p.)
0 głosów
2 odpowiedzi 366 wizyt
pytanie zadane 11 września 2015 w C i C++ przez C☺ndzi Stary wyjadacz (12,100 p.)

93,456 zapytań

142,451 odpowiedzi

322,721 komentarzy

62,837 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

Kursy INF.02 i INF.03
...