class Test {
      public static String func(int num) {
         return func("",num);
      }
      public static String func(String prev, int num) {
         StringBuffer buf = new StringBuffer();
         buf.append(((prev.length()== 0)?"":prev+" ")+num+"\n");
         for(int i = num-1; i >= 1; i--)
            buf.append(func(((prev.length()== 0)?"":prev+" ")+i,num-i));
         return buf.toString();
      }      public static void main(String args[]) {
         System.out.println(func(5));
      }
}

解决方案 »

  1.   

    or:      public static String func(int num) {
             return func("",num,num);
          }      public static String func(String prev,int max, int num) {
             StringBuffer buf = new StringBuffer();
             if(max>= num)
                buf.append(((prev.length()== 0)?"":prev+" ")+num+"\n");
             for(int i = num-1; i >= 1; i--)
                if(max >= i)
                   buf.append(func(((prev.length()== 0)?"":prev+" ")+i,i,num-i));
             return buf.toString();
          }