Haskell中的简单递归

时间:2015-09-05 15:47:26

标签: haskell recursion

我试图了解Haskell中的递归。我想编写一个带有以下属性的简单递归函数:if do { try context.save() } catch {} 然后x > 50rec(x) = x - 5。 这就是我想出的:

rec(x) = rec(rec(x+10))

非递归部分似乎工作正常,但递归并不是。每个小于50的数字只返回50.例如rec x = if x > 50 then x-5 else rec (rec (x+10)) rec 60 = 55 rec 40 = 50

有关如何修复我的代码的任何建议将不胜感激。

1 个答案:

答案 0 :(得分:3)

对于x <= 50,您的功能相当于:

rec' x = if x `mod` 5 == 0
         then 50
         else 45 + x `mod` 5

可以通过运行简单的测试来检查:

all (\ x -> rec x == rec' x) [0..50]

因此,您需要输入一个不是5的倍数的输入,以获得与50不同的答案。