NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

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

Aktivity
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
Člen
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í
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
10.2.2016 21:09
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
10.2.2016 21:25
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
10.2.2016 21:32
Avatar
hanpari
Člen
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 Valkovič:10.2.2016 21:50

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

Nahoru Odpovědět
10.2.2016 21:50
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
hanpari
Člen
Avatar
Odpovídá na Patrik Valkovič
hanpari:10.2.2016 22:00

Tak to je fajne :)

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