Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Jde natrénovat rekurze?

Aktivity
Avatar
Ondřej Krsička:17.1.2016 20:43

Ahoj, rekurze mi oproti cyklům přijde o dost těžší vymyslet / pochopit. Je možné ji nějak natrénovat, nebo se s tím člověk musí narodit? Díky za všechny příspěvky.

 
Odpovědět
17.1.2016 20:43
Avatar
Odpovídá na Ondřej Krsička
Michal Žůrek - misaz:17.1.2016 20:45

ona se hlavně učí na straně dementních příkladech.

Představ si příklad chceš přečíst všechny txt soubory na disku. Jak to uděláš?

 
Nahoru Odpovědět
17.1.2016 20:45
Avatar
Odpovídá na Michal Žůrek - misaz
Ondřej Krsička:17.1.2016 20:58
def funkce(index, seznam):
        print(seznam[index])
        if index < len(seznam) - 1:
                funkce(index + 1, seznam)

nebo

for i in a:
        print(i)

Těch možností s cyklem je víc.

 
Nahoru Odpovědět
17.1.2016 20:58
Avatar
Odpovídá na Ondřej Krsička
Michal Žůrek - misaz:17.1.2016 21:00

pythonu nerozumím, ale zadání bylo ať vypíšeš všechny soubory ve všech složkách, podsložkách, ....

 
Nahoru Odpovědět
17.1.2016 21:00
Avatar
Odpovídá na Michal Žůrek - misaz
Ondřej Krsička:17.1.2016 21:11

Jo, takže abych se skamarádil s rekurzí budu hledat v dokumentaci metody okolo práce se soubory...

Jinak by to bylo něco jako

funkce(složka A)
{
        cyklem projdu všechny soubory ve složce A a vypíšu jen ty .txt
        pokud složka A obsahuje jiné složky, tak
                funkce(složka A \\ Vnitřní složka)
}
 
Nahoru Odpovědět
17.1.2016 21:11
Avatar
Odpovídá na Ondřej Krsička
Ondřej Krsička:17.1.2016 21:12

jo, ale to by asi chodilo furt do té samé složky, takže

funkce(složka A)
{
        cyklem projdu všechny soubory ve složce A a vypíšu jen ty .txt
        pokud složka A obsahuje jiné složky, tak
                cyklus pro každou podsložku .... funkce(složka A \\ Vnitřní složka)
}
 
Nahoru Odpovědět
17.1.2016 21:12
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na Ondřej Krsička
Adam Ježek:17.1.2016 21:22

Rekurze je strasnej parchant, taky s ni mam problemy :D De jen o to si uvedomit, co predavat funkci a jak poznat kdy se ma ukoncit. Coz je vpodstate ten nekvetsi problem :D Vypis souboru je lehkej, treba faktorial taky, ale zkus pogooglit cviceni na rekurze.
Ale ty slozky bych resil asi takhle:

vypistextaky(slozka):
    seznam = ziskejVsechnoVeSlozce(slozka)
    for neco in seznam:
        pokud neco je .txt; vypis
        pokud neco je slozka; vypistextaky(neco)
Nahoru Odpovědět
17.1.2016 21:22
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
David Novák
Tvůrce
Avatar
David Novák:17.1.2016 21:26

No.. Rekurze je obecně jednodušší na pochopení, než cyklus.. :D Jestli nevěříte, běžte se podívat třeba na implementaci BVS (binární vyhledávací strom)..

Nahoru Odpovědět
17.1.2016 21:26
Chyba je mezi klávesnicí a židlí.
Avatar
Odpovídá na Adam Ježek
Ondřej Krsička:17.1.2016 21:29

Jo, vlastně to máme podobný. Ale Michal nerozumí Pythonu (nechápu), tak to mám tak hnusně :D
Mně ta rekurze přijde strašně mocná, ale tím je i těžší na pochopení :)

 
Nahoru Odpovědět
17.1.2016 21:29
Avatar
Odpovídá na Adam Ježek
Ondřej Krsička:17.1.2016 21:30

Takový příklad:

def hanoi(kolik, odkud, pres, kam):
    navod = []
    if kolik > 0:
        hanoi(kolik - 1, odkud, kam, pres)
        print("{} > {}".format(odkud, kam))
        hanoi(kolik - 1, pres, odkud, kam)
 
Nahoru Odpovědět
17.1.2016 21:30
Avatar
Odpovídá na Ondřej Krsička
Ondřej Krsička:17.1.2016 21:31

EDIT: řádek navod = [] mažu :D

 
Nahoru Odpovědět
17.1.2016 21:31
Avatar
Neaktivní uživatel:17.1.2016 21:31

Rekurzi pochopíš, jakmile pochopíš rekurzi ;-)

Nahoru Odpovědět
17.1.2016 21:31
Neaktivní uživatelský účet
Avatar
coells
Tvůrce
Avatar
Odpovídá na Ondřej Krsička
coells:17.1.2016 21:42

V tom případě se podívej na dynamické programování, pak ti rekurze přijde jako procházka růžovým sadem.

A ne, pokud porodníci něco netají, rekurze není vrozená vada.
Je to trochu složitější, protože to chce dobré matematické základy, pak je to hodně přirozená věc.

 
Nahoru Odpovědět
17.1.2016 21:42
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Adam Ježek:17.1.2016 21:50

pardon, chtěl sem dát palec nahoru, sem na mobilu :/

Nahoru Odpovědět
17.1.2016 21:50
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Odpovídá na Adam Ježek
Neaktivní uživatel:17.1.2016 22:15

Hmm, pro tyhle situace by se asi hodilo tlačítko "změnit hodnocení"

Nahoru Odpovědět
17.1.2016 22:15
Neaktivní uživatelský účet
Avatar
Jaro
Člen
Avatar
Odpovídá na Ondřej Krsička
Jaro:17.1.2016 22:34

Vyskúšaj si funkcionálne(clo­jure, haskell...) alebo logické(prolog) programovanie, resp. jazyky v ktorých cykly nie sú. Ja som na nich pochopil poriadne rekurziu :) je to pomerne prirodzená vec, len ako už spomínal Michal, je podávaná zlým spôsobom.

Nahoru Odpovědět
17.1.2016 22:34
“What would you do if you were 100% sure you couldn’t fail?”
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Adam Ježek:17.1.2016 23:06

uz se to resilo, brzo bude mozne to pri preklepu zmenit

Nahoru Odpovědět
17.1.2016 23:06
Počkej chvíli, poradím se s křišťálovou koulí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 18 zpráv z 18.