解题思路

把苹果(数量为m)放盘子(数量为n)里有两类放法,一种是有盘子为空的情况,一种是所有盘子里都有苹果的情况

  • 1.有盘子为空,假设有一个盘子为空那么求解的问题转化为m个苹果放入(n-1)个盘子中,表达式即为(m,n-1)
  • 2.盘子不为空,那么每个盘子中至少有一个苹果,问题转化为(m-n)个苹果放入n个盘子中,表达式即为(m-n,n)
  • 两类方法的不同组合数量相加就是总的数量,退出条件就是m == 0 || n = 1 || m == 1,当m或n小于0时不满足条件返回0
package main

import(
    "fmt"
)

func main(){
    for{
        var m,n int
        l,_ := fmt.Scan(&m,&n);if l == 0{
            return
        }
        fmt.Println(getSum(m,n))
    }
}

func getSum(m,n int)int{
    if m < 0 || n < 0{
        return 0
    }
    if m == 0 || m == 1 || n == 1{
        return 1
    }
    return getSum(m,n - 1) + getSum(m-n,n)
}