【问题标题】:Simple Recursion in HaskellHaskell 中的简单递归
【发布时间】:2015-09-06 05:18:41
【问题描述】:

我试图理解 Haskell 中的递归。我想编写一个具有以下属性的简单递归函数:如果x > 50 然后rec(x) = x - 5rec(x) = rec(rec(x+10)) 否则。 这是我想出的:

rec x = if x > 50
    then x-5
    else rec (rec (x+10))

非递归部分似乎工作正常,但递归却不行。每个小于 50 的数字只返回 50。例如 rec 60 = 55 rec 40 = 50 rec 25 = 50

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

【问题讨论】:

  • 与您的问题无关,但我会调查警卫。它们会让你的函数更简洁(主观上)。
  • 我也会提倡使用守卫 (rec x | x > 50 = x - 5),然后我建议您也解释一下您期望该函数返回什么,因为在我看来它似乎工作正常。

标签: haskell recursion


【解决方案1】:

对于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 不同的答案。

【讨论】:

    猜你喜欢
    • 2015-05-27
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    相关资源
    最近更新 更多