java数据结构算法里的变位字程序有一个地方搞不懂,请高人指教
import   java.io.BufferedReader; 
 import   
java.io.IOException; 
 import   java.io.InputStreamReader;     
 public   class   AnagramApp   {   
 		static   int   size; 
 		static   int   count; 
 		static   char[]   arrChar   =   new   char[100];  		 
 		public   static   void   main(String[]   args)   throws   
IOException   { 
 			System.out.println( "Enter   a   word:    "); 
 			String   input   =   getString(); 
 			size   =   input.length(); 
 			count   =   0; 
 			for(int   j   =   0;   j    <   size;   j++){ 
 				arrChar[j]   =   input.charAt(j); 
 			} 
 			doAnagram(size); 
 		}  		 
 		public   static   void   doAnagram(int   newSize)   { 
 			if(newSize   ==   1)   { 
 				return; 
 			}  			 
 			for(int   j   =   0;   j    <   newSize;   j++)   { 
 				doAnagram(newSize   -   1); 
 				if(newSize   ==   2){//为什么把这行的if条件去掉打印出来的单词就会有重复呢?虽然凭感觉认为需要这个if条件,但是不知道真正的原因是什么,也就是不知道怎么证明出来。唉,本人数学差。。。 
 					displayWord(); 
 				} 
 				rotate(newSize); 
 			} 
 		}  		 
 		public   static   void   rotate(int   newSize)   { 
 			int   j; 
 			int   position   =   size   -   newSize; 
 			char   temp   =   arrChar[position];  			 
 			for(j   =   position   +   1;   j    <   size;   j++)   { 
 				arrChar[j   -1]   =   arrChar[j]; 
 			} 
 			arrChar[j-1]   =   temp; 
 		}  		 
 		public   static   void   displayWord()   { 
 			if(count    <   99)   { 
 				System.out.print( "    "); 
 			}  			 
 			if(count    <   9)   { 
 				System.out.print( "    "); 
 			}  			 
 			System.out.print(++count   +    "    "); 
 			for(int   j   =   0;   j    <   size;   j++){ 
 				System.out.print(arrChar[j]); 
 			} 
 			System.out.print( "       "); 
 			System.out.flush(); 
 			if(count   %   6   ==   0)   { 
 				System.out.println( " "); 
 			} 
 		}  		 
 		public   static   String   getString()   throws   IOException   { 
 			InputStreamReader   isr   =   new   InputStreamReader(System.in); 
 			BufferedReader   br   =   new   BufferedReader(isr); 
 			String   s   =   br.readLine(); 
 			return   s; 
 		} 
 } 
------解决方案--------------------我是新手  上面的问题还在等我升星拉 
 在来帮你解决问题吧
------解决方案--------------------好头大的递归啊!
------解决方案--------------------你这个是全排列的问题,其实这里的if(newSize == 2)就是每次递归到最后只剩下两个字符时(用书上的话讲就是把前缀排好,再把后缀加上去,直到标号相等)输出.在算法设计上的全排列问题中有相同的思想!!建议楼主去看看