#lang racket
(define (no-more? coin-values)
(null? coin-values))
(define (except-first-denomination coin-values)
(cdr coin-values))
(define (first-denomination coin-values)
(car coin-values))
(define (cc amount coin-values)
(cond ((= amount 0) 1)
((or (< amount 0) (no-more? coin-values)) 0)
(else
(+ (cc amount
(except-first-denomination coin-values))
(cc (- amount
(first-denomination coin-values))
coin-values)))))
(define us-coins (list 50 25 10 5 1))
(define uk-coins (list 100 50 20 10 5 2 1 0.5))
(define us-coins-r (list 1 25 50 10 5))
(cc 100 us-coins)
(cc 100 uk-coins)
(cc 100 us-coins-r)
运行结果
292
104561
292
打乱顺序是不会影响结果的,只会影响计算顺序,之前有练习做过这个计算的展开树,其实就是展开树的样子不同,但是数的总分支数量是一样的。