我正在编写一个函数,根据面额和金额列表计算在方案中进行更改的方式。我的代码如下,但它不能按预期工作。我应该使用cons而不是+运算符吗?第三行的基本情况应该是空列表吗?
(define (change k l)
(cond ((= k 0) 1)
((or (< k 0) (null? l)) 0)
(else (+ (change k (cdr l))
(change (- k (car l))
(cdr l))))))
测试:
(change 11 (list 1 5 10 25))
答案 0 :(得分:2)
如果返回的值只是数字,那么忘记cons
和'()
来构建输出,并且仅使用{{1 }},car
,cdr
用于处理输入。除此之外,请注意代码的最后一行有一个小错误,这里是固定版本:
null?
现在它按预期工作:
(define (change k l)
(cond ((= k 0) 1)
((or (< k 0) (null? l)) 0)
(else
(+ (change k (cdr l))
(change (- k (car l)) l))))) ; don't do (cdr l) here