现有1元、2元、5元、10元、20元面值不等的钞票,问需要20元钱有多少种找钱方案,打印所有的结果!(go实现)

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 ++
   }
}
posted @ 2021-02-07 17:39  陆何方  阅读(190)  评论(0)    收藏  举报