public class QuanPailie { /** 统计总数 */ static int total = 0; public static void swap(int[] array, int a, int b) { if (a == b) { return; } array[a] = array[a] ^ array[b]; array[b] = array[a] ^ array[b]; array[a] = array[a] ^ array[b]; } public static void print(int[] array) { for (int element : array) { System.out.print(element + " "); } System.out.println(); total++; } /** * * 数组第一个元素固定,其他后续的元素再allRank(array, begin + 1, length); * (当然需要轮流让每个元素放在第一位) * @param array * @param begin * @param length */ public static void allRank(int[] array, int begin, int length) { if (begin == length - 1) { print(array); } else { for (int i = begin; i < length; i++) { swap(array, begin, i);//“使用for(int i = begin; i < length; i++)去轮流放在第一位的做法” allRank(array, begin + 1, length);//无视第一位,将后续的元素继续递归 swap(array, i, begin);//如果不恢复现场,那么allRank就是一个会改变array的函数,那么 //使用“for(int i = begin; i < length; i++)去轮流放在第一位的做法” //就会失效。 } } } public static void main(String[] args) { int[] array = { 1, 2, 3, 4, 5 }; allRank(array, 0, array.length); System.out.println("总数:"+total); } }