zlx362211854 / daily-study

每日一个知识点总结,以issue的形式体现
10 stars 6 forks source link

105. 把 m 个同样的苹果分放在 n 个同样的篮子里,允许有的蓝子空 着不放,共有多少种不同的分法? #161

Open zlx362211854 opened 4 years ago

zlx362211854 commented 4 years ago

例如把3个苹果放在2个篮子里,有两种分法:0,3 和 1,2 (注:(1,2)和(2, 1), (0,3)和(3,0)分法是相同的,只算一种分法)

goldEli commented 4 years ago
function f(m, n) {

  // 递归出口
  // 当0个苹果或者1个盘子时,只有一种可能        
  if (m === 0 || n === 1) {
    return 1
  }

  // 当盘子数大于苹果数,那至少有 n-m个空盘子,那么 f(n, m) 等于 f(m, m)
  if (n > m) {
    return f(m ,m)
  }
  // 当盘子数小于苹果数
  // 1、至少一个空盘子:f(m,n) 等于 f(m, n-1)
  // 2、每个盘子都放苹果,拿走一个苹果也不影响结果:f(m, n) 等于 f(m-n, n)
  if (n < m) {
    return f(m, n-1) + f(m-n, n)
  }
}

console.log(f(3, 2)) // 2
zlx362211854 commented 4 years ago
function f(m, n){

      if  (n == 1 || m == 0)  return 1;   

      if  (n > m)  return f (m, m);

      return  f (m , n-1)+f (m-n , n);

}