Scheme SICP计数变更问题&x2014;为什么N=X+;Y
我是一个潜伏的门外汉,目前正在努力阅读《圣经》的第一章 我遇到过“计数变化”示例过程,尽管我理解该过程本身,但我仍在与它所基于的前提作斗争: 假设我们认为可用的硬币类型是按某种顺序排列的。那么以下关系成立: 使用n种硬币改变金额的方法数量等于Scheme SICP计数变更问题&x2014;为什么N=X+;Y,scheme,computer-science,sicp,Scheme,Computer Science,Sicp,我是一个潜伏的门外汉,目前正在努力阅读《圣经》的第一章 我遇到过“计数变化”示例过程,尽管我理解该过程本身,但我仍在与它所基于的前提作斗争: 假设我们认为可用的硬币类型是按某种顺序排列的。那么以下关系成立: 使用n种硬币改变金额的方法数量等于 除第一种硬币外,使用其他硬币改变金额的方法的数量,以及 使用所有n种硬币改变数量a-d的方法的数量,其中d是第一种硬币的面额 要了解为什么这是真的,可以观察到改变的方法可以分为两组:不使用任何第一种硬币的方法和使用第一种硬币的方法。因此,对某一金额
- 除第一种硬币外,使用其他硬币改变金额的方法的数量,以及
- 使用所有n种硬币改变数量a-d的方法的数量,其中d是第一种硬币的面额
感觉这个问题的答案就在我眼前,但也许这个特殊附属物的巨大尺寸将永远掩盖这个答案。让我们想象一种简化的货币,只有1和5个面额。我要求你们拿出15英镑,规定你们给我的硬币中至少有一枚必须是5英镑。你有多少种方法可以做到这一点?在这一点上,你可以尝试产生所有的方法来产生15英镑的变化,然后扔掉所有不符合我要求的。但很容易观察到,你也可以先留出一个5英镑来满足我的需求,然后想出如何用你选择的任何方式来兑换剩余的10英镑。这里的诀窍是,考虑到一堆硬币的面额,其中一种我们称之为d,有两种方法可以兑换一定数量的a:
- 不要使用任何面额为d的硬币李>
- 至少使用一个d(我指的是“d”所指的“d”面额硬币)
在第二种情况下,我们将使用至少一个d。所以我们知道,因为我们使用了至少一个d,所以A的量可以被分成A=d+(A-d):这就是“使用至少一个d”的意思。那么现在有多少种方法可以组合成这样的硬币呢?好的,答案是,这是一个数量(A-d)的改变方式的数量,除了这次我们仍然允许使用ds进行改变。在其他响应者的帮助下思考了几天之后,我认为这个问题可以得到澄清(至少对我来说)通过在书的原始解释后添加详细说明,该行内容如下: 但后一个数字等于使用第一种硬币后剩余金额的兑换方法的数量 我将新的一段措辞如下: 这是因为我们可以假设,的每一种组合必须至少包含我们已经拥有的第一种硬币中的一种
(define (loadways weight plates)
(cond
[(= weight 0) 1]
[(or (= (length plates) 0)
(< weight 0)
) 0]
[else (+ (loadways weight (cdr plates))
(loadways (- weight (car plates)) plates))]
))
(define weight-rack (list 20 10 5))
(loadways 40 weight-rack)