Snažím sa pochopiť rekurziu v Haskellu. Chcem napísať jednoduchú rekurzívnu funkciu s nasledujúcimi vlastnosťami: ak x > 50
potom rec(x) = x - 5
a rec(x) = rec(rec(x+10))
inak. S týmto som prišiel:
rec x = if x > 50
then x-5
else rec (rec (x+10))
Zdá sa, že nerekurzívna časť funguje dobre, ale rekurzia nie je. Každé číslo menšie ako 50 sa len vráti 50. Napríklad rec 60 = 55
rec 40 = 50
rec 25 = 50
Uvítame akékoľvek návrhy, ako opraviť môj kód.
odpovede:
3 pre odpoveď č. 1pre x <= 50
, vaša funkcia je ekvivalentná:
rec" x = if x `mod` 5 == 0
then 50
else 45 + x `mod` 5
Môžete to skontrolovať vykonaním jednoduchého testu:
all ( x -> rec x == rec" x) [0..50]
V dôsledku toho musíte zadať vstup, ktorý nie je násobkom 5, aby ste dostali odpoveď odlišnú od 50.