我试图解决硬币变化问题:将伪代码转换为逻辑步骤?
鉴于数,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课程,直接的答案会违反荣誉代码。
UPDATE 作为@EmilVikström亲切地对我解释,究竟是怎么回事在那里我试图产生一个小的伪代码应该是一样的方式(这仅仅是else子句作为休息甚至对我来说也是不言自明的)。
else
cc (amount - kindOfCoins.head , kindOfCoins) + cc (amount , kindOfCoins.tail)
这是从方案产生的东西吗? 如果不是我哪里出错了? 请再次不要给我答案(只要指出我的方向正确,如果可以的话),因为这会违反课程的荣誉代码。
这看起来像Scheme代码。 “前面的算术符号”仅仅意味着“对这两个参数应用'+'函数”。 –
这是计划。是的,它有前面的算术符号。如果教师希望你了解Scheme,他们应该指出你一些教程或其他。实际上,您*有*代码,并且您要求我们对其进行解码。 –
@EmilVikström怎么样 - 在再次调用cc的return子句中签名?我可以从你所说的话中推断出cc的数量加上了某些东西。我认为这是一个列表。然而,这是有道理的,我认为这份清单并不完整。如果列表包含除第一个元素之外的所有元素。是这样吗?最后一件事。 return子句是两个cc函数的补充吗? – Bula