/**
* 题目:当前有一堆1块,2快,5快零钱,将10块钱换成零钱,有多少种换法?
*/
var aryParams = [1,2,5];
var nTotalNum = 10;
var arySum = [];
//相同数组
var isEqualArray = function(pAry){
var strAry = pAry.sort().toString();
for(var key in arySum){
var pAryTmp = arySum[key];
if(pAryTmp.sort().toString() == strAry){
return false;
}
}
return true;
};
//深拷贝数组
var getCopyArray = function(pAryOld){
var pAryNew = [];
for(var key in pAryOld){
pAryNew.push(pAryOld[key]);
}
return pAryNew;
};
//获取分解状态
var getLastState = function(aryNum, nSubValue){
var nIdx = aryNum.length - 1;
var nValue = aryNum[nIdx];
if(nValue < nSubValue ){
//放弃存储
return -1;
}
if(nValue == nSubValue){
//进行存储
return 0;
}
//继续递归
return 1;
};
//递归函数
var callbackAry = function(aryNum){
for(var key in aryParams){
var nEnum = getLastState(aryNum, aryParams[key]);
if(nEnum == 0 && isEqualArray(aryNum)){
arySum.push(aryNum);
}else if(nEnum > 0){
var nSubValue = aryParams[key];
var pCpy = getCopyArray(aryNum);
var nIdx = pCpy.length - 1;
var nValue = pCpy[nIdx];
pCpy[nIdx] = nSubValue;
pCpy.push(nValue - nSubValue);
callbackAry(pCpy);
}
}
};
var pTable = [];
pTable.push(nTotalNum);
callbackAry(pTable);
console.log("可以换成",arySum.length, "种");
console.log("序列如下:")
for(var key in arySum){
console.log(arySum[key]);
}