`
freizl
  • 浏览: 3802 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

答复: 有1元,5元,10元,20元,50元,问组成100元有多少种情况

阅读更多
SICP, 1.2.2  Tree Recursion
有详细的解释
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html#%_sec_1.2.2

CLISP的一种实现

(defparameter us-coins (list 50 25 10 5 1))

(defun no-more? (coin-values)
  (null coin-values))

(defun except-first-denomination (coin-values)
  (cdr coin-values))

(defun first-denomination (coin-values)
  (car coin-values))

(defun cc (amount coin-values)
  (cond ((= amount 0) 1)
        ((or (< amount 0) (no-more? coin-values)) 0)
        (t
         (+ (cc amount
                (except-first-denomination coin-values))
            (cc (- amount
                   (first-denomination coin-values))
                coin-values)))))

(defun count-change (amount &optional (coin-values us-coins))
  (cc amount coin-values))

;;; test, assertEquals 343
(print (count-change 100 '(50 20 10 5 1)))
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics