public class numberDiv {
//private static final huafen numberrDiv = null;
//static int d[]=new int[32];
static int num=0;
public static void main(String[] args) {
System.out.println("请输入的整数:");
Scanner sc=new Scanner(System.in);
int number=sc.nextInt();
numberDiv.Division(number,number,"");
System.out.println("num="+num);}
public static int Division(int m, int n,String str){
if ((m<=0)||(n<=0)) return 0 ;
if((m==1)||(n==1)){
System.out.print(str);
for (int i=1; i<m; i++){
System.out.print("1+"); }
System.out.println ("1");
num++;
return num;}
if(n==m){
System.out.println(str+m);
num++;
numberDiv.Division(m,n-1,str);
// return ;
return num;
}
if(m>n){
int n1=numberDiv.Division(m-n,n,str+n+"+");
int n2=numberDiv.Division(m,n-1,str);
num=n1+n2;
return num;
}
if(m<n)
numberDiv.Division(m,m,str);
num++;
return num;
}
}
输出结果为:
请输入的整数:
5
5
4+1
3+2
3+1+1
2+2+1
2+1+1+1
1+1+1+1+1
num=34
请问要改进什么地方?
Division方法返回分解的个数,所以numberDiv类不需要再定义成员变量static int num=0;。
Division方法中if ((m == 1) || (n == 1))成立时,本次是一个分解,并且不需要再递归分解,所以返回1。
Division方法中if (n == m)成立时,本次是一个分解,且需要递归分解,所以返回1+递归分解个数。
Division方法中if (m > n)成立时,返回两个递归分解的个数之和。
Division方法中最后代码即为m < n,直接返回递归分解的个数。