Diskuze: Jde natrénovat rekurze?

Volná diskuze Jde natrénovat rekurze?

Avatar
Ondřej Krsička
Redaktor
Avatar
Ondřej Krsička:

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. ledna 20:43
Avatar
Odpovídá na Ondřej Krsička
Michal Žůrek (misaz):

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. ledna 20:45
Nesnáším {}, proto se jim vyhýbám.
Avatar
Ondřej Krsička
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Ondřej Krsička:
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. ledna 20:58
Avatar
Odpovídá na Ondřej Krsička
Michal Žůrek (misaz):

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. ledna 21:00
Nesnáším {}, proto se jim vyhýbám.
Avatar
Ondřej Krsička
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Ondřej Krsička:

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. ledna 21:11
Avatar
Ondřej Krsička
Redaktor
Avatar
Odpovídá na Ondřej Krsička
Ondřej Krsička:

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. ledna 21:12
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Ondřej Krsička
Adam Ježek:

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  +1 17. ledna 21:22
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
David Novák
Tým ITnetwork
Avatar
David Novák:

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. ledna 21:26
Chyba je mezi klávesnicí a židlí.
Avatar
Ondřej Krsička
Redaktor
Avatar
Odpovídá na Adam Ježek
Ondřej Krsička:

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. ledna 21:29
Avatar
Ondřej Krsička
Redaktor
Avatar
Odpovídá na Adam Ježek
Ondřej Krsička:

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. ledna 21:30
Avatar
Ondřej Krsička
Redaktor
Avatar
 
Nahoru Odpovědět 17. ledna 21:31
Avatar
Jakub Šárník:

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

 
Nahoru Odpovědět  +6 17. ledna 21:31
Avatar
coells
Redaktor
Avatar
Odpovídá na Ondřej Krsička
coells:

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  +1 17. ledna 21:42
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Jakub Šárník
Adam Ježek:

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

Nahoru Odpovědět 17. ledna 21:50
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Odpovídá na Adam Ježek
Jakub Šárník:

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

 
Nahoru Odpovědět  +3 17. ledna 22:15
Avatar
Jaro
Člen
Avatar
Odpovídá na Ondřej Krsička
Jaro:

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. ledna 22:34
A ship is safe in harbor. But then again, that´s not what ships are for.
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Jakub Šárník
Adam Ježek:

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

Nahoru Odpovědět  +1 17. ledna 23:06
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
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.