我正在尝试解决硬币找零问题:
给定一个数字 k 的列表,有多少种方法可以改变给定的数量 m。
作为资源之一,我有以下伪代码:
(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)))
但是我不明白这个伪代码。当它们应该在后面时,它在前面有算术符号。我了解 else 语句开始的地方。但是当进入 else 循环时,我不知道发生了什么。您能否将此伪代码简化为在 else 子句之后的每个步骤中要做的一些逻辑事情?
或者有什么文章比这个伪代码解决这个问题更有用。谷歌搜索这个我只发现要求你给出最佳改变的问题,但我不需要那个。
注意请不要给我代码,因为这是一个 coursera 课程,直接回答会违反荣誉代码。
更新 正如@EmilVikström 亲切地向我解释了那里到底发生了什么,我试图生成一个应该与方案相同的小伪代码(这只是 else 子句,因为其余的甚至是不言自明的我)。
else
cc ( amount - kindOfCoins.head , kindOfCoins) + cc ( amount , kindOfCoins.tail )
这是计划的结果吗?如果不是我哪里出错了?请再次不要给我答案(如果可以的话,请指出我正确的方向),因为这将违反 coursera 荣誉守则。