![](https://i-blog.csdnimg.cn/blog_migrate/cd59a2edf053f3f52eaa91d1e02b95c2.png)
f(n)为划分整数n的方法
6可以划分为6加几(6)
5加几(5+1)
4加几(4+2,4+1+1)
3加几(3+3,3+2+1,3+1+1+1)
2加几(2+2+2,2+2+1+1,2+1+1+1+1)
1加几(1+1+1+1+1+1)
即6可以划分为6.......f(0)
5 ......f(1)
4.......f(2)
3.......f(3)
2.......f(4)
1.......f(5) 形成递归
单独的参数很难完成,我们需要设置缓冲数组int[] a 和数组下标int k
每一行划分的第一位确定了,即缓冲数组a[0]已经确定
需要确定之后的数字
代码
main方法
public static void main(String[] args)
{
int[] a=new int[1000];
f(6,a,0);
}
划分方法
public static void f(int n,int[] a,int k)
{
//出口
if(n<=0) {
for(int i=0;i<k;i++)
System.out.print(a[i]+" ");
System.out.println();
return ;
}
//相似性
for(int i=n;i>0;i--) {//i=6,5,4,3,2,1 循环6次
if((k>0)&&i>a[k-1])continue;//确保数字由大到小
a[k]=i;//数组下标为k的元素
f(n-i,a,k+1);
//6...f(0) 5...f(1) 4...f(2)
//i...f(n-i)
}
写的不好,若有错误,请多谅解