【问题标题】:ELM recursive iterationELM 递归迭代
【发布时间】:2021-09-10 08:20:18
【问题描述】:

我需要创建一个接受数字的函数,例如对于给定的数字 x,它通过将数字 x 的所有数字添加到自身来计算数字 y。

一个例子:

给定 x = 123: 它返回 129 = 1 + 2 + 3 + 123

给定 x = 35: 它返回 y = 43 = 3 + 5 + 35

我有这个功能,但我需要另一种方式:

computeNextValue : Int -> Int
computeNextValue input =
    String.fromInt input
        |> String.split ""
        |> List.filterMap String.toInt
        |> List.sum
        |> (+) input

【问题讨论】:

  • 不要在字符串上工作。整数和字符串之间的转换是浪费计算。您可以使用/% 提取数字。
  • @MrSmith42:除了这正是转换所做的,可能以更快的方式,因为它是内置的。
  • 你的意思是你需要另一种方式?为什么需要另一种方式?您对另一种方式有具体要求吗?
  • 只有数字,不转换成字符串

标签: algorithm elm


【解决方案1】:

首先,让我们创建一个递归函数,为您提供一个数字的所有数字。主要思想是通过modBy 10可以得到一个整数的最右边的数字,可以通过// 10从数字中去掉它:

getDigits : Int -> List Int 
getDigits num =
    if num == 0 then 
        [] -- base case
    else
        modBy 10 num :: getDigits (num // 10) -- recursive case

请注意,此函数为 0 返回 [],但对于此用例来说没问题。

computeNextValue : Int -> Int
computeNextValue input =
    input + List.sum (getDigits inputs)

【讨论】:

  • remainderBy 可能比modBy 更清晰、更正确,尽管它们对正数具有相同的效果:这不是模算术。
猜你喜欢
  • 2012-10-17
  • 2019-12-10
  • 2011-11-14
  • 1970-01-01
  • 2012-04-26
  • 2012-01-23
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多