Siemaneczko mirasy, przychodze do was z poniższym kodem, nawet printy eleganckie wstawilem wiem ze to lubicie https://pastebin.com/ZfLgFsSQ Kod jest rozwiazaniem zadania https://www.codewars.com/kata/5426d7a2c2c7784365000783 1. Jak widac w output, pierw kod dodaje nawiasy do sekwencji, lecz potem odejmuje (wyswietla sie print "jestem po ifach) oraz parametry n maleją. Czyli następuje jakby odwrotne dzialanie, mimo że nigdzie w funkcji nie mamy takiego dzialania aby od n1 czy n2 odejmowac 1. Wiec nie rozumiem skąd to
2. To łączy sie z 1 punktem, nie rozumiem na jakiej zasadzie kod po dodaniu pierwszej sekwencji do zbioru przechodzi do tworzenia nowej, ktora ma sie różnic od poprzedniej #python #informatyka #naukaprogramowania
@Lunatik: @zwei: no nasrane bo nie ja to pisalem! dlatego ja tez nie rozumiem! XD ja dodalem do funkcji printy jedynie dodalem do opisu link z zadaniem do ktorego jest to rozwiazanie
@Tooca_rev: rekurencja, mordeczko. zanim dojdzie do pierwszego "po ifach", to masz wywołaną parę razy rekurencyjnie funkcję push_in. potem masz odwrotnie, bo schodzisz ze stacka wywołań
@zwei: "zanim dojdzie do pierwszego "po ifach", to masz wywołaną parę razy rekurencyjnie funkcję" - no to czaje wiem
"potem masz odwrotnie, bo schodzisz ze stacka wywołań " - tutaj zupelnie nie wiem o czym mowisz, moge sie domyslac na chlopski rozum ale wolalbym abys wyjasił, a jak nie to jak sebcel metoda grecka
@Tooca_rev: jak wywołujesz push_in w środku push_in, to nie jest tak, że magicznie pierwszy nadal się wykonuje, tylko czeka na tego drugiego aż coś zwróci
w związku z tym masz call stack
push_in 1 push_in 2 push_in 3
no i każdy z nich zdąży wywołać print(przed ifami)
jak 3 już dalej nie będzie nic wywoływał, to wypisze print(po ifach) ok, push_in 3 skończył, to zdejmujemy go z call stacka i wracamy
@zwei: rozumiem juz część, nie rozumiem jedynie dlaczego po dodaniu elementu (gdy parametry n1=2 oraz n2=2) dlaczego rekurencja dziala dalej na logike rozkminiam ( i oczywiscie z moich printów dodatkowych( ͡°͜ʖ͡°)) to tak że wraz z call stack'iem funkcja zwraca wartosci zmiennych z początkowych stacków a nie koncowych, racja?
@Tooca_rev: Dlatego że ify nie są exclusive (elif). Rozważmy: dla n=2 push_in(s='(', n1=1, n2=0) wtedy zarówno n1 < n jak i n1 - n2 > 0 są spełnione, co oznacza że zostaną otwarte dwie gałęzie rekurencji - dla s='((', n1=2, n2=0, oraz s='()', n1=1, n2=1
@Tooca_rev: @zwei: @Calka_internowana: Bardzo fajne zadanko, moja pierwsza próba była zupełnie na innej według mnie prostszej zasadzie programowania dynamicznego.
https://pastebin.com/ZfLgFsSQ
Kod jest rozwiazaniem zadania https://www.codewars.com/kata/5426d7a2c2c7784365000783
1. Jak widac w output, pierw kod dodaje nawiasy do sekwencji, lecz potem odejmuje (wyswietla sie print "jestem po ifach) oraz parametry n maleją. Czyli następuje jakby odwrotne dzialanie, mimo że nigdzie w funkcji nie mamy takiego dzialania aby od n1 czy n2 odejmowac 1. Wiec nie rozumiem skąd to
2. To łączy sie z 1 punktem, nie rozumiem na jakiej zasadzie kod po dodaniu pierwszej sekwencji do zbioru przechodzi do tworzenia nowej, ktora ma sie różnic od poprzedniej
#python #informatyka #naukaprogramowania
sformatuj to blackiem
sformatuj to raz, a dwa to na spokojnie wytłumacz, co ma robić ta funkcja
przemyśl to sobie
no nasrane bo nie ja to pisalem! dlatego ja tez nie rozumiem! XD
ja dodalem do funkcji printy jedynie
dodalem do opisu link z zadaniem do ktorego jest to rozwiazanie
"potem masz odwrotnie, bo schodzisz ze stacka wywołań " - tutaj zupelnie nie wiem o czym mowisz, moge sie domyslac na chlopski rozum ale wolalbym abys wyjasił, a jak nie to jak sebcel metoda grecka
#edt: wygogluje se
w związku z tym masz call stack
push_in 1
push_in 2
push_in 3
no i każdy z nich zdąży wywołać print(przed ifami)
jak 3 już dalej nie będzie nic wywoływał, to wypisze print(po ifach)
ok, push_in 3 skończył, to zdejmujemy go z call stacka i wracamy
na logike rozkminiam ( i oczywiscie z moich printów dodatkowych( ͡° ͜ʖ ͡°)) to tak że wraz z call stack'iem funkcja zwraca wartosci zmiennych z początkowych stacków a nie koncowych, racja?
dla n=2 push_in(s='(', n1=1, n2=0)
wtedy zarówno
n1 < n
jak i
n1 - n2 > 0
są spełnione, co oznacza że zostaną otwarte dwie gałęzie rekurencji - dla s='((', n1=2, n2=0, oraz s='()', n1=1, n2=1
https://www.codewars.com/kata/reviews/5b6cae2c3858243620000a22/groups/621661f6ceb741000184143a