function - 递归 Haskell 函数,但只执行一次
问题描述
我有一个函数需要计算出分解一定数量的钱所需的最小变化。
用户将输入货币的价值和可能的面额,它会输出每种面额需要多少来弥补货币,例如。
> coinChange 34 [1, 5, 10, 25, 50, 100]
[4,1,0,1,0,0]
这是我到目前为止所拥有的:
coinChange :: Integer -> [Integer] -> [Integer]
coinChange _ [] = []
coinChange 0 xs = []
coinChange v xs = do
dropWhile (>v) (reverse xs)
createNewList :: Integer -> [Integer]
createNewList 0 = []
createNewList x = 0 : createNewList (x - 1)
我有一个单独的函数createNewList
,我想调用它来在开头设置一个新的 0 列表。
但是,因为我计划在计算coinChange
还剩多少钱时创建一个递归函数,所以如果我只调用makeNewList
in coinChange
,此时它会重置列表,因为每次递归都会调用它。
所以我的问题是,有没有办法让一个函数在继续递归之前只调用另一个函数一次。
希望我已经说清楚了,谢谢
解决方案
一般来说,您可以在 Haskell 中创建本地辅助函数。也许这个例子会启发你:
prepareData x = if x < 0 then -x else x
mainFunction n =
let recursiveLocalFunction x =
if x < 2 then 1 else x * recursiveLocalFunction (x - 1)
in recursiveLocalFunction (prepareData n)
推荐阅读
- jdbc - 无法执行 Preparedstatement 批处理 JDBC 语句
- xml - NuGet package differences depending on build method
- api - 获取 Maven 依赖项的依赖树的 API
- python - Create class objects with a dictionary as argument
- azure - Azure app registration with Microsoft Graph permissions anomaly
- reactjs - 如何根据数组中的元素数量做出输入反应
- api - How to get SMS history with Esendex API?
- java - 关于库的UML类图的问题
- php - 获取(并显示)与 ACF 关系字段匹配的其他帖子
- python - Discord.py 嵌入颜色