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

funkcja w JavaScript

VPS Starter Arubacloud
0 głosów
498 wizyt
pytanie zadane 24 stycznia 2016 w JavaScript przez Look85 Użytkownik (600 p.)

Witam!

Staram sie ogarnac jakies podstawy JS 

Ale niestety juz przy funkcjach utknalem na dobre.

Kompletnie nie czaje jak to dziala. 

function findSequence(goal) {
  function find(start, history) {
    if (start == goal)
      return history;
    else if (start > goal)
      return null;
    else
      return find(start + 5, "(" + history + " + 5)") ||
             find(start * 3, "(" + history + " * 3)");
  }
  return find(1, "1");
}

print(findSequence(24));

 

Jest ktos wstanie mi to prosto wytlumaczyc? Najlepiej bardzo prosto

1 odpowiedź

0 głosów
odpowiedź 24 stycznia 2016 przez Comandeer Guru (604,880 p.)
W tym kodzie zadeklarowana jest funkcja findSequence, która działa jako domknięcie. Wewnątrz niej zadeklarowana została funkcja find – dostępna tylko wewnątrz funkcji findSequence. Jest ona wywoływana rekurencyjnie, by uzyskać wynik, który następnie jest zwracany.
Bardzo dziwny przykład jak na początki nauki JS…
komentarz 24 stycznia 2016 przez Comandeer Guru (604,880 p.)

Patrz:

  1. Następuje wywołanie funkcji findSequence, w którym definiowana jest zmienna history (pusty ciąg tekstowy).
  2. Wewnątrz funkcji findSequence dochodzi do wywołania funkcji find, która dostaje history jako 2. parametr.
  3. Każde wywołanie find dokleja swój wynik do history, po czym po raz kolejny wywołuje find przekazując to, co już dokleiło.
  4. Gdy nie ma już co doklejać, stworzony tak ciąg jest zwracany przez return.
komentarz 24 stycznia 2016 przez Look85 Użytkownik (600 p.)

Co to znaczy że dokleja swój wynik do history, czyli że za każdym razem dodaje ten parametr 1? A co z parametrem start, jego nie "doklejamy"?  Czy to się wiąże jakoś z tym ze start to liczba, a history to string? I skąd w wyniku wzięły się te dodatkowe nawiasy? Sorry, że tak męczę...

komentarz 24 stycznia 2016 przez Comandeer Guru (604,880 p.)

Co to znaczy że dokleja swój wynik do history

Jest dodawane to: 

"(" + history + " + 5)"

lub to:

"(" + history + " * 3)"

co tłumaczy skąd się wzięły dodatkowe nawiasy.

start służy do obliczeń – po prostu.

komentarz 24 stycznia 2016 przez Look85 Użytkownik (600 p.)
Dobra, dzięki za pomoc, odpuszczam. Potestuję jakieś proste funkcje, a rekurencje czy jak to się nazywa zostawię, jak się uda coś bardziej ogarnąć to do tego wrócę. Dla mnie to totalny odlot, jak to gdzieś w komentarzach wyczytałem
komentarz 24 stycznia 2016 przez Look85 Użytkownik (600 p.)
Chyba już to mam, przeglądnąłem zakamarki internetu i już coś czaje
Wiem chyba jak już to działa, o ile nie rypnąłem się coś w rozpisywaniu tego.

find(1+5, "(1+5)")
find(6+5, "((1+5)+5)")
find(11+5, "(((1+5)+5)+5)")
find(16+5, "((((1+5)+5)+5)+5")
find(21+5, "((((1+5)+5)+5)+5)+5")
za duzo
find(16*3, "((((1*3)+5)+5)*3)")
za duzo
find(11*3, "(((1+5)+5)*3)")
za dużo
...
find(1*3, "(1*3)")
find(3+5, "((1*3)+5)"
find(8*3, "(((1*3)+5)*3)"
bingo!

 

Podobne pytania

0 głosów
1 odpowiedź 317 wizyt
pytanie zadane 9 lutego 2023 w JavaScript przez niezalogowany
+1 głos
2 odpowiedzi 463 wizyt
pytanie zadane 9 maja 2021 w JavaScript przez Doge Gaduła (3,420 p.)
0 głosów
1 odpowiedź 103 wizyt
pytanie zadane 21 stycznia 2020 w JavaScript przez Kamila Użytkownik (680 p.)

93,005 zapytań

141,970 odpowiedzi

321,249 komentarzy

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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...