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

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

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

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:

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:
>>> 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:

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:

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:

"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
 
Nahoru Odpovědět  +1 10.2.2016 22:00
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.