/ Jednoduchá rekurzia v Haskell - haskell, rekurzia

Jednoduché Rekurzia v Haskell - haskell, Rekurzia

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ď č. 1

pre 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.