racket-树形递归换零钱

今天在图书馆待了一天,做了两件事:看考研数学和看sicp
感想是lisp确实是很有趣的,给我的感觉很数学
而且比之前学的语言更加接近问题的本质
在接下来的考研时间里,有lisp可以陪伴我
我想要变强= =

;;树形递归换零钱
#|关键在与基础定义(即:递归的结束条件):
1、当amount=0,说明最后一次兑换成功,算一种
2、当amount<0,说明兑换失败,算0种
3、当kinds-of-coins=0,说明没有可以兑换的硬币种类了,算0种
|#
#|
(define (count-change amount)
(cc amount 5))

(define (cc amount kinds-of-coins)
(cond ((= amount 0) 1)
      ((or (< amount 0) (= kinds-of-coins 0)) 0)
      (else (+ (cc amount (- kinds-of-coins 1))
               (cc (- amount
                      (first-denomination kinds-of-coins))
                   kinds-of-coins)))))

(define (first-denomination kinds-of-coins)
(cond ((= kinds-of-coins 1) 1)
      ((= kinds-of-coins 2) 5)
      ((= kinds-of-coins 3) 10)
      ((= kinds-of-coins 4) 25)
      ((= kinds-of-coins 5) 50)))
|#


你可能感兴趣的:(racket-树形递归换零钱)