这是斐波那契数 中用迭实现的
(define (fib n) (fib-iter 1 0 n))
(define (fib-iter a b count)
(if(= count 0)
b
(fib-iter (+ a b) a (- count 1)))
)
下面关于它的应用 换零钱方式的统计
(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)
)
)
对于一种算法最关键的一点还是书上所说:如果a(为兑换的总额)为0的话,应该算作是有一种换零钱的方式!
如果a小于0的话应该算作有0中的换钱方式
如果n(为可以使用的兑换面额)为0的话,应该算作是有0种换零钱的方式!
其实,最关键的是第一点,一直挺想不通的,为什么,当兑换的面额为0的话,却又有一种换零钱的方式! 如果,没有这条的话,那么迭代是没有结果的!
上面的运行结果是 “292” !
据个人猜测最后应该是292 个1 相加的结果!