2013-10-06 56 views
0

我正在寫一個函數來計算給定一個面額列表和金額的計劃更改方法的數量。我的代碼如下,但它不能按預期工作。我應該使用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)) 

回答

2

如果返回值只是一個然後忘掉cons'()爲建設輸出,只有用carcdrnull?用於處理輸入。除此之外,要知道,有一個在你的代碼的最後一行的一個小錯誤,這裏的固定的版本:

(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 

現在它按預期工作:

(change 11 (list 1 5 10 25)) 
=> 4