给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有多少种表示法。

递归问题

int makeChange(int n, int denom)
{
    int next_denom;

    switch(denom){
        case 25:
            next_denom = 10;
            break;
        case 10:
            next_denom = 5;
            break;
        case 5:
            next_denom = 1;
            break;
        case 1:
            return 1;
    }

    int ways = 0;
    for(int i = 0; i * denom <= n; ++i){
        ways += makeChange(n - i * denom, next_denom);
    }
    
    return ways;
}

int makeChange(int n)
{
    return makeChange(n, 25);
}

你可能感兴趣的:(面试题)