SVN8.COM - SVN中文技术网

投递文章 投稿指南 SVN中文技术网公告:技术交流诚聘优秀版主最新公告
搜索: 您的位置主页>JAVA技术>语言基础>递归问题

递归问题

SVN技术网 www.svn8.com 2008-09-16 07:04:57   来源:   作者:  评论:0 点击:
如何实现一个字符串数组的全排列问题,底下人都说可以用递归方法实现,我想了会,没想出来,不过有人贴出了他的代码,我这里借用一下:
  1. public class AllSort{
  2.     public static void main(String[] args) {
  3.         char buf[]={'a','b','c'};
  4.         perm(buf,0,buf.length-1);
  5.     }
  6.     public static void perm(char[] buf,int start,int end){
  7.         if(start==end){//当只要求对数组中一个字母进行全排列时,只要就按该数组输出即可
  8.             for(int i=0;i<=end;i++){
  9.                 System.out.print(buf[i]);
  10.             }
  11.             System.out.println();   
  12.         }
  13.         else{//多个字母全排列
  14.             for(int i=start;i<=end;i++){
  15.                 char temp=buf[start];//交换数组第一个元素与后续的元素
  16.                 buf[start]=buf[i];
  17.                 buf[i]=temp;
  18.                 printArray(buf);
  19.                 
  20.                 perm(buf,start+1,end);//后续元素递归全排列
  21.                 
  22.                 temp=buf[start];//将交换后的数组还原
  23.                 buf[start]=buf[i];
  24.                 buf[i]=temp;
  25.                 printArray(buf);
  26.             }
  27.         }
  28.     }
  29.     public static void printArray (char[] charArray){
  30.         System.out.print("Now the array includes: ");
  31.         for (int i=0; i<charArray.length; i++){
  32.             System.out.print(charArray[i]);
  33.         }
  34.         System.out.println("");
  35.     }
  36. }
  1. Now the array includes: abc
  2. Now the array includes: abc
  3. abc
  4. Now the array includes: abc
  5. Now the array includes: acb
  6. acb
  7. Now the array includes: abc
  8. Now the array includes: abc
  9. Now the array includes: bac
  10. Now the array includes: bac
  11. bac
  12. Now the array includes: bac
  13. Now the array includes: bca
  14. bca
  15. Now the array includes: bac
  16. Now the array includes: abc
  17. Now the array includes: cba
  18. Now the array includes: cba
  19. cba
  20. Now the array includes: cba
  21. Now the array includes: cab
  22. cab
  23. Now the array includes: cba
  24. Now the array includes: abc

还有一个比较著名的递归问题,就是n皇后问题。这里只给出实现代码,稍后会补上相应的问题说明...

  1. class NQueen{
  2.     private int noOfSolutions;
  3.     private int noOfQueens;
  4.     private int[] queensInRow;
  5.     
  6.     public NQueen (){
  7.         this.noOfQueens = 8;
  8.         this.queensInRow = new int[8];
  9.         this.noOfSolutions = 0;
  10.     }
  11.     
  12.     public NQueen (int queens){
  13.         this.noOfQueens = queens;
  14.         this.queensInRow = new int[noOfQueens];
  15.         this.noOfSolutions = 0;
  16.     }
  17.     
  18.     public boolean canPlaceQueen (int k, int i){
  19.         for (int j=0; j<k; j++){
  20.             if ((queensInRow[j]==i) || (Math.abs(queensInRow[j]-i)== Math.abs(j-k))){
  21.                 return false;
  22.             }
  23.         }
  24.         return true;
  25.     }
  26.     
  27.     public void queensConfiguration (int k){
  28.         for (int i=0; i<noOfQueens; i++){
  29.             if (canPlaceQueen(k, i)){
  30.                 queensInRow[k] = i;
  31.                 
  32.                 if (k == noOfQueens-1){
  33.                     printConfiguration();
  34.                 }
  35.                 else{
  36.                     queensConfiguration(k+1);
  37.                 }
  38.             }
  39.         }
  40.     }
  41.     
  42.     public void printConfiguration (){
  43.         noOfSolutions ++;
  44.         System.out.print("(");
  45.         
  46.         for (int i=0; i<noOfQueens-1; i++){
  47.             System.out.print(queensInRow[i] +", ");
  48.         }
  49.         System.out.println(queensInRow[noOfQueens-1] +")");
  50.     }
  51.     
  52.     public int solutionsCount(){
  53.         return noOfSolutions;
  54.     }
  55. }
  56. public class TestNQueen {
  57.     public static void main (String args[]){
  58.         NQueen queen = new NQueen();
  59.         
  60.         queen.queensConfiguration(0);
  61.     }
  62. }
  1. (04752613)
  2. (05726314)
  3. (06357142)
  4. (06471352)
  5. (13572064)
  6. (14602753)
  7. (14630752)
  8. (15063724)
  9. (15720364)
  10. (16257403)
  11. (16470352)
  12. (17502463)
  13. (20647135)
  14. (24170635)
  15. (24175360)
  16. (24603175)
  17. (24730615)
  18. (25147063)
  19. (25160374)
  20. (25164073)
  21. (25307461)
  22. (25317460)
  23. (25703641)
  24. (25704613)
  25. (25713064)
  26. (26174035)
  27. (26175304)
  28. (27360514)
  29. (30471625)
  30. (30475261)
  31. (31475026)
  32. (31625704)
  33. (31625740)
  34. (31640752)
  35. (31746025)
  36. (31750246)
  37. (35041726)
  38. (35716024)
  39. (35720641)
  40. (36074152)
  41. (36271405)
  42. (36415027)
  43. (36420571)
  44. (37025164)
  45. (37046152)
  46. (37420615)
  47. (40357162)
  48. (40731625)
  49. (40752613)
  50. (41357206)
  51. (41362750)
  52. (41506372)
  53. (41703625)
  54. (42057136)
  55. (42061753)
  56. (42736051)
  57. (46027531)
  58. (46031752)
  59. (46137025)
  60. (46152037)
  61. (46152073)
  62. (46302751)
  63. (47302516)
  64. (47306152)
  65. (50417263)
  66. (51602473)
  67. (51603742)
  68. (52064713)
  69. (52073164)
  70. (52074136)
  71. (52460317)
  72. (52470316)
  73. (52613704)
  74. (52617403)
  75. (52630714)
  76. (53047162)
  77. (53174602)
  78. (53602417)
  79. (53607142)
  80. (57130642)
  81. (60275314)
  82. (61307425)
  83. (61520374)
  84. (62057413)
  85. (62714053)
  86. (63147025)
  87. (63175024)
  88. (64205713)
  89. (71306425)
  90. (71420635)
  91. (72051463)
  92. (73025164)


技术交流 录入:SVN中文技术网[www.svn8.com]
Tags:  
责任编辑:
  • 请文明参与讨论,禁止漫骂攻击。 用户名:新注册) 密码: 匿名:
    评论总数:0 [ 查看全部 ] 网友评论
    关于我们 - 联系我们 - 广告服务 - RSS订阅 - 网站地图 - 返回顶部