做一个计算更改样式的问题,我在lisp写了这个递归,我想知道是否有人有任何提示,使这更有效?如果数字变得太大,它就会开始破裂并花费大约3分钟来计算相当于10英镑的不同组合!即使把我指向正确的方向也会很好,谢谢!
(defun dollars (amount &optional (coins '(5 10 20 50 100 200 500 1000 2000 5000 10000)))
(cond ((= amount 0) 1)
((or (< amount 0) (= (length coins) 0) (> amount 30000)) 0)
((zerop (mod amount 5))
(+ (dollars (- amount (first coins)) coins)
(dollars amount (rest coins))))))
Run Code Online (Sandbox Code Playgroud)