谁能给我解释一下球拍中的代码,我把2欧元和1欧元的硬币换成10美分和20美分?
我只能换一次2欧元的硬币和一次1欧元的硬币。20美分和10美分。下面是我的代码:
(define (change sum coins)
(if (< sum 200)
0
(if (= sum 200)
1
(if (and (> sum 0)
(<= (length coins) 0))
0
(+ (change (- sum (car coins)) (cdr coins))
(change sum (cdr coins)))))))
(change 200'(20 10))
(change 100'(20 10))
我需要修改什么?谢谢你的帮助!
由于200目标是硬编码的,因此您应该从当前的和0开始,并向上计数,而不是向下计数:
(define (change sum coins)
(if (> sum 200) ; invalid solution
0
(if (= sum 200) ; good solution
1
(if (= (length coins) 0) ; no more coins to use
0
(+ (change (+ sum (car coins)) ; use first coin,
coins) ; _increasing_ the sum
(change sum
(cdr coins))))))) ; don't use first coin any more
现在我们有
> (change 0 '(10))
1
> (change 0 '(20 10))
11
> (change 0 '(7))
0
>
现在你可以抽象出目标值200,使它成为一个新函数的参数,这个新函数必须使这个函数成为它的内部定义,这样它就可以访问它的参数:
(define (coin-change-ways target coins)
(define (change sum coins)
....
....)
(change 0 coins))
查看更多解释