Open zlx362211854 opened 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
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);
}
例如把3个苹果放在2个篮子里,有两种分法:0,3 和 1,2 (注:(1,2)和(2, 1), (0,3)和(3,0)分法是相同的,只算一种分法)