func giveChange() {
//币值
kind := [5] int{1,2,5,10,20}
//总金额
money := 20
arr := [5] int{}
//递归实现
collocation(arr, money, kind, 0)
}
/*
arr 记录组合情况
money 还剩多少金额
kind 币值数组
kindIndex 当前组合哪个币值在kind的key
*/
func collocation(arr [5]int,money int, kind [5]int, kindIndex int) {
curNum := 0
if(money == 0){
//成功
fmt.Println("arr=",arr)
return
}
if(kindIndex > 4){
return
}
cur := kind[kindIndex]
if(money < cur){
return
}
//下次递归查下一币值
kindIndex++
for curNum*cur <= money {
//fmt.Println("arr",arr, "money=", money, "cur=", cur, "curNum=", curNum)
if(kindIndex == 1){
arr = [5]int{}
//第一个币值时重置数组
}
//记下当前币值组合数量
arr[kindIndex-1] = curNum
//递归下一个币值
collocation(arr, money - (curNum * cur), kind, kindIndex)
curNum ++
}
}