level 4
love_mely2
楼主
输入钱的总数cents,列表lst可以用的面额,如果省略输入就是(25 10 5 1) 。
程序输出为最少金币数。用动态规划做,代码如下:
(defun make-best-change(cents &optional (lst'(25 10 5 1)))
(if(< cents (car(last lst)))
0
(let((minw most-positive-fixnum))
(do((i lst(rest i)))
((null i)minw)
(unless(>(car i)cents)
(setf minw(min minw (1+ (make-best-change(- cents (car i))lst)))))))))
当cents值比较小是可以顺利找对,但是当cents大一点,比如67,程序就直接卡死了,
怀疑是递归效率太低的问题。
各位吧友有啥好建议?
2012年10月21日 20点10分
1
程序输出为最少金币数。用动态规划做,代码如下:
(defun make-best-change(cents &optional (lst'(25 10 5 1)))
(if(< cents (car(last lst)))
0
(let((minw most-positive-fixnum))
(do((i lst(rest i)))
((null i)minw)
(unless(>(car i)cents)
(setf minw(min minw (1+ (make-best-change(- cents (car i))lst)))))))))
当cents值比较小是可以顺利找对,但是当cents大一点,比如67,程序就直接卡死了,
怀疑是递归效率太低的问题。
各位吧友有啥好建议?





