华为oj——放苹果
递归
对于m个苹果,n个盘:函数count(m,n)
如果m < n,就跟m个盘子放m个苹果一样,即count(m,m);
如果m >= n,则分为两种情况,一种是有空盘子的,一种是没有空盘子的,这两种情况不会有重叠,而且加在一起就等于情况总数:
第一种情况:m个苹果放在 n-1个盘子里,因为至少有一个空盘子,即count(m, n-1);
第二种情况:每个盘子都至少有一个苹果,m-n个苹果再放到n个盘子里,即count(m - n, n);
以上两种情况得到递归式:count(m,n)=count(m,n-1)+count(m-n,n)
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int m = input.nextInt();
int n = input.nextInt();
System.out.println(count(m, n));
}
public static int count(int m, int n){
if(m == 0 || n == 1){
return 1;
}
if(m < n){
return count(m, m);
}else{
return count(m, n - 1) + count(m - n, n);
}
}
}