对于一个给定的n(n>=1),计算最大加数不超过m的方案数量
对n和m分情况讨论,详见代码
import java.util.Scanner;
public class Integer整数划分 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int s=solve(n,n);
System.out.println(s);
}
private static int solve(int n, int m) {
if(n<0||m<0) {
return 0;//如果n或者m小于零,返回0;
}
if(n==1||m==1) {
return 1;//如果n或者m等于1,无论怎样都只有一种分法
}
if(n<m) {
return solve(n,n);//n小于m,则递归调用solve(n,n);n>=m
}
if(n==m) {
return solve(n,m-1)+1;//n=m,就一种方案,加一再递归solve(n,m-1);
}
return solve(n,m-1)+solve(n-m,m);//正常情况下,n>m>1;返回solve(n,m-1)表示继续往下递归,solve(n-m,m)表示n-m剩余的数的最大加数也要小于m
}
}