题目描述:
现有面值为1, 2, 5, 10的零钱,问把100元兑换成零钱有多少种方法.
分析:
使用递归的方式,考虑有用m种面值(d[m])兑换n元,则对于每种面值都有两种方式,即换或者不换,则有
f(n, m) = f(n, m - 1) + f(n - d[m - 1], m)—>(不兑换当前面值和兑换当前面值).
#include <iostream>
using namespace std;
int exchangeRMB(int n, int m, int *element);
int main()
{
int element[4] = {1, 2, 5, 10};
int count = exchangeRMB(100, 4, element);
cout << "100RMB 可以兑换成 " << count << "种方式." << endl;
return 0;
}
int exchangeRMB(int n , int m, int *element)
{
if(n == 0)
return 1;
if(n < 0 || m == 0)
return 0;
return exchangeRMB(n, m - 1) + exchangeRMB(n - element[m - 1], m);
}
对于使用非递归方式的实现,还没考虑好。