使用面额列表计算方案中的变更

时间:2013-10-06 17:16:43

标签: recursion scheme counting cons

我正在编写一个函数,根据面额和金额列表计算在方案中进行更改的方式。我的代码如下,但它不能按预期工作。我应该使用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))

1 个答案:

答案 0 :(得分:2)

如果返回的值只是数字,那么忘记cons'()来构建输出,并且仅使用{{1 }},carcdr用于处理输入。除此之外,请注意代码的最后一行有一个小错误,这里是固定版本:

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