递归算法分钱问题

/**
 * 开发一个递归方法,确定将一定数量的钱(以美分为单位)转换成两角五分的硬币,一角硬币,五分和一分硬币的方法总数。
 * 例如,假设总钱数为17分,那么共有6种方法。
 * 1角,7一分 
 * 1角,1五分,2一分 
 * 3五分,2一分 
 * 2五分,7一分 
 * 1五分,12一分 
 * 17一分
 * 
 * 为方便起见,可以理解为用25,10,5,1分解一个数,求一共有多少种分解方法
 * 
 */

public class DivideMoney {
	public static int[] inputMoney = {1,5,10,25};
	public static int ways(int amount,int[] demominations){
		
		return ways(amount,demominations[demominations.length - 1]);
	}
	public static int ways(int amount,int dividerNum){
		int result = 0;
		if(dividerNum == inputMoney[0]){
			return 1;
		}
		for(int i = inputMoney.length - 1;i >= 1;i--){
			if(dividerNum == inputMoney[i]){
				for(int j=0;j <= amount / dividerNum;j++){
					result += ways((amount-dividerNum*j),inputMoney[i-1]);
				}
			}
		}
		return result;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int amount = 17;
		int ways = ways(amount,inputMoney);
		System.out.println("Total ways : " + ways);
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值