SICP 両替の種類を得るためをClojureで実装してみた
1$を1¢ 5¢ 10¢ 25¢ 50¢で何種類両替できるかです。 これも再帰でできちゃうんですよね。このあたりから??的な度合いが高くなる。
まずは写経から。
(declare cc)
(declare first-denomination)
(defn count-change[amount]
(cc amount 5))
(defn cc[amount kinds-of-coins]
(cond
(zero? amount ) 1
(or (< amount 0) (zero? kinds-of-coins)) 0
:else
(+ (cc amount (dec kinds-of-coins))
(cc (- amount
(first-denomination
kinds-of-coins))
kinds-of-coins))))
(defn 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))
(count-change 100)