Diskuze: Nepřímá rekurze - dvě funkce se navzájem využívají

Python Python Nepřímá rekurze - dvě funkce se navzájem využívají

Aktivity (1)
Avatar
Ondřej Krsička
Redaktor
Avatar
Ondřej Krsička:10.2.2016 20:52

Ahoj, toto mi nefunguje, prosím o pomoc. Je to příklad, jedná se o princip :-))

def todle(vstup, cislo, maxCislo):
        if cislo < maxCislo:
                return tamto(vstup, cislo + 1, maxCislo) + " todle"
def tamto(vstup, cislo, maxCislo):
        if cislo < maxCislo:
                return todle(vstup, cislo + 1, maxCislo) + " tamto"

todle("Vidím", 1, 10)

Je tam ten problém, že využívám funkci, která je definovaná níže.

 
Odpovědět 10.2.2016 20:52
Avatar
hanpari
Redaktor
Avatar
Odpovídá na Ondřej Krsička
hanpari:10.2.2016 21:09

Ne, problém je hlavně v tom, že každá rekurze musí mít nějakou ukončující podmínku. Kde ji máš ty?
Tvoje funkce vrací ke všemu ještě dvě různé hodnoty: Tu záhadu, co vracíš, když splníš podmínku, a pak nic, pokud podmínku nesplníš.

použij konstrukci return neco if podmínka else neco_jiného.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +2 10.2.2016 21:09
Avatar
Ondřej Krsička
Redaktor
Avatar
Odpovídá na hanpari
Ondřej Krsička:10.2.2016 21:25
>>> def todle(vstup, cislo):
        if cislo > 0:
                return tamto(vstup, cislo - 1) + "todle, "
        else:
                return vstup
>>> def tamto(vstup, cislo):
        if cislo > 0:
                return todle(vstup, cislo - 1) + "tamto, "
        else:
                return vstup

Funguje to. Tiše se stydím. Příště se radši se zamyslím, než sem něco napíšu :-@

 
Nahoru Odpovědět  +1 10.2.2016 21:25
Avatar
Ondřej Krsička
Redaktor
Avatar
Odpovídá na hanpari
Ondřej Krsička:10.2.2016 21:32

Jo a díky za konstrukci, kterou jsem dosud neviděl, je to elegantní :-)

 
Nahoru Odpovědět  +1 10.2.2016 21:32
Avatar
hanpari
Redaktor
Avatar
Odpovídá na Ondřej Krsička
hanpari:10.2.2016 21:46

Kdo se nezeptá, nic se nedozví :)

Tady si můžeš přečíst, v čem jsou výhody té konstrukce té běžné, kterou jsi použil ty. Pokud nebudu počítat, že vynecháš jeden return:

http://fsharpforfunandprofit.com/…-statements/

Pokud budeš číst ten článek pozorně, zjistíš, proč by se ti tohle nikdy nestalo, kdybys použil tu konstrukci, co ti radím :)

 
Nahoru Odpovědět 10.2.2016 21:46
Avatar
patrik.valkovic
Šéfredaktor
Avatar
patrik.valkovic:10.2.2016 21:50

"todle" "tamto"? :D Nechceš se naučit Ostrou javu? :D
https://github.com/…ut/OSTRAJava

Nahoru Odpovědět  +5 10.2.2016 21:50
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
hanpari
Redaktor
Avatar
Odpovídá na patrik.valkovic
hanpari:10.2.2016 22:00

Tak to je fajne :)

 
Nahoru Odpovědět  +1 10.2.2016 22:00
Avatar
Ondřej Krsička
Redaktor
Avatar
 
Nahoru Odpovědět 10.2.2016 22:16
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 8 zpráv z 8.