所以,我是一个业余爱好者,正在努力学习《计算机程序的构造和解释》(免费下载!)。在第一章中有一个示例过程可以计算使用美国硬币进行找零的可能方式;(change-maker 100) => 292
。它的实现大致如下:
(define (change-maker amount)
(define (coin-value n)
(cond ((= n 1) 1)
((= n 2) 5)
((= n 3) 10)
((= n 4) 25)
((= n 5) 50)))
(define (iter amount coin-type)
(cond ((= amount 0) 1)
((or (= coin-type 0) (< amount 0)) 0)
(else (+ (iter amount
(- coin-type 1))
(iter (- amount (coin-value coin-type))
coin-type)))))
(iter amount 5))
无论如何,这是一个树形递归过程,作者们“留下挑战”是找到一种迭代过程来解决同样的问题(即在固定空间内)。我没有运气弄清楚这个问题或在沮丧后找到答案。我想知道我是不是被卡住了,还是作者在和我玩。