解题思路
把苹果(数量为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) }