给了半美元,四分之一美元,10美分,5美分,1美分,将1美元换成零钱,一共有多少种换法?更一般的问题,给了任意数量的现金,我们能计算出有多少种换零钱方式吗?
采用递归,有一种简单解法:
将总数a的现金换成n种硬币的不同方式的数目等于
-
将现金a换成除了第一种硬币之外的所有其他硬币的不同方式的数目
-
将现金a-d换成所有种类的硬币的不同方式的数目,其中d是第一种硬币币值
#lang racket (define (count-change amount) (cc amount 5)) (define (cc amount kinds-of-coins) (cond ((= amount 0) 1) ((or (< amount 0) (= kinds-of-coins 0)) 0) (else (+ (cc amount (- kinds-of-coins 1)) (cc (- amount (first-dm kinds-of-coins)) kinds-of-coins))))) (define (first-dm kinds-of-coins) (cond ((= kinds-of-coins 1) 1) ((= kinds-of-coins 2) 5) ((= kinds-of-coins 3) 10) ((= kinds-of-coins 4) 25) ((= kinds-of-coins 5) 50))) (count-change 100)