递归算法分钱问题

/**
 * 开发一个递归方法,确定将一定数量的钱(以美分为单位)转换成两角五分的硬币,一角硬币,五分和一分硬币的方法总数。
 * 例如,假设总钱数为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);
	}

}

    原文作者:递归算法
    原文地址: https://blog.csdn.net/Sherry_Rui/article/details/51050763
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞