我正在努力解决这个问题:
只使用1c,5c,10c,25c或50c硬币获得50美元的方式有多少?
这是我的代码:
main = print $ coinCombinations [1,5,10,25,50] !! 5000
coinCombinations coins = foldr recurse (1 : repeat 0) coins
where recurse a xs = take a xs ++ zipWith (+) (drop a xs) (recurse a xs)
Run Code Online (Sandbox Code Playgroud)
事实证明,我的recurse功能很慢,可能是二次或更差.但我不明白为什么,因为它看起来类似于斐波纳契列表
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
Run Code Online (Sandbox Code Playgroud)