题目:将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,
其中n1≥n2≥…≥nk≥1,k≥1。
正整数n的这种表示称为正整数n的划分。求正整数n的不
同划分个数。
例如正整数6有如下11种不同的划分:
6;
5+1;
4+2,4+1+1;
3+3,3+2+1,3+1+1+1;
2+2+2,2+2+1+1,2+1+1+1+1;
1+1+1+1+1+1。
思路:采用递归,将正整数n进行划分,最大的加数不能大于划分数m。分析:
1.当n = 1或m = 1,一种划分方法
2.当n == m ,划分方法分成包含m和不包含m两种,即=1+func(n,n-1)
3.当n > m时,划分方法分为包含m和不包含m,即func(n-m,m)+func(n,m-1)
(1)包含m:可以看出 m+(…….),而(……)的划分方法就是func(n-m,m)
(2)不包含m:可以看成n的m-1划分,即func(n,m-1)
3.当n < m,划分是正整数之和,不可能出现负数,即=func(n,n)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int t=input.nextInt();
while (t>0) {
int n=input.nextInt();
System.out.println(function(n, n));
t--;
}
// TODO Auto-generated method stub
}
public static int function(int n,int m){
if (n==1 || m==1) {
return 1;
}else if (n<m) {
return function(n, n);
}else if (n==m) {
return function(n, n-1)+1;
}else {
return function(n, m-1)+function(n-m, m);
}
}
}