递归实现排列的打印功能
public static void main(String[] args) throws Exception {
perm(new String[] { "a", "b", "c", "d" });
System.out.println();
perm(new String[] { "a", "b", "c", "d" }, 2);
System.out.println();
perm(new String[] { "a", "b", "c", "d" }, 0);
}
// 全排列入口
private static void perm(String[] a) {
if (a != null) {
perm(a, 0, a.length);
}
}
// 部分排列入口
private static void perm(String[] a, int count) {
if (a != null && count >= 0 && count <= a.length) {
perm(a, 0, count);
}
}
private static void perm(String[] a, int start, final int count) {
if (start == count) {
for (int i = 0; i < count; i++) {
System.out.print(a[i] + ", ");
}
System.out.println();
} else {
for (int i = start; i < a.length; i++) {
swap(a, start, i);
perm(a, start + 1, count);
swap(a, start, i);
}
}
}
private static void swap(String[] a, int i, int j) {
String t = a[i];
a[i] = a[j];
a[j] = t;
}
分享到:
相关推荐
### 基于Hadoop用并行递归实现排列组合运算 #### 背景介绍与问题描述 在计算机科学领域,数字排列组合是经典的算法问题之一,它不仅通俗易懂,而且对于初学者来说非常友好。通过这个问题的学习,我们可以很好地...
### 递归实现字符串逆序 #### 知识点概览 本文将详细介绍如何使用C++中的递归技术来实现字符串的逆序操作。逆序字符串是一个常见的编程问题,在多种场景下都有应用,例如文本处理、算法设计等。通过递归方法解决此...
PHP递归实现一位数组的排列算法。欢迎下载和评论。
排列与组合的Java递归实现.doc
这个名为"案例排列组合(递归)"的主题聚焦于如何利用递归方法来实现排列和组合的计算。递归是一种强大的编程技术,它允许函数调用自身以解决复杂的问题。 首先,我们需要理解排列和组合的概念。排列是指从n个不同...
在压缩包中的`Permutation.java`文件中,你可以找到这样的实现,它演示了如何通过递归生成所有可能的排列。 接着,我们来看组合(Combination)。组合与排列不同,它不考虑元素的顺序,是从n个不同元素中取出m个...
递归实现排列型枚举.md
// 递归实现全排列 static void GeneratePermutations(int[] arr, int index) { if (index == arr.Length - 1) { Console.WriteLine(string.Join(" ", arr)); } else { for (int i = index; i ; i++) { Swap...
第一次上传,多多支持 棋盘覆盖算法 递归排列 C++实现
本例程通过递归法实现了在易语言中获取排列组合的方法,这在处理大量数据或需要进行各种可能性计算的问题时非常有用。 递归法是解决此类问题的经典策略,它通过将问题分解成更小的子问题来解决。在排列组合问题中,...
使用递归实现N重循环,这里的N是不确定的。 此代码实现的功能描述如下: 1. 有一个字符串的矩阵,用vector< vector< CStirng > > 表示 2. 行与行之间进行排列组合 3. 输出所有组合的方式
递归解决方案是汉诺塔问题的常见解答方式,但这里我们将探讨非递归实现。 非递归实现通常依赖于栈数据结构,因为汉诺塔问题本质上是一个深度优先搜索的问题。首先,我们需要理解栈的工作原理:栈是一种后进先出...
**非递归实现**:非递归实现通常使用循环,逐步调整查找区间的上下界,直到找到目标元素或区间变为零。 **递归与非递归的比较** 递归实现通常代码简洁,易于理解,但可能会占用大量的函数调用栈空间,对于深度大的...
在这个非递归实现中,我们聚焦于如何使用循环结构来解决问题,而不是采用常见的递归方法。递归通常在解决此类问题时容易造成大量的重复计算,而循环则可以通过更有效地管理状态空间来优化性能。 八数码问题的基本...
### 全排序算法C++递归实现解析 #### 一、引言 全排序(也称为全排列)是指对一个序列中的元素进行重新排列的所有可能的方式。例如,对于数字序列`1, 2, 3`,其所有可能的全排列为`123, 132, 213, 231, 312, 321`。...
总的来说,这个非递归实现使用了状态跟踪和循环控制,避免了递归调用带来的额外开销,适合于理解和学习汉诺塔问题的另一种解决思路。这种方法虽然在代码复杂性上可能略高于递归解法,但在执行效率上可能会有优势,...
这一过程可以通过递归实现,直到所有元素都排好序。 以下是快速排序的C语言实现示例: ```c void quickSort(int arr[], int left, int right) { if (left ) { int pivot = partition(arr, left, right); ...
Please use recursion(递归)to get fibonacci numbers(一种整数数列). The user will specify(指定,详细说明) how many of the numbers he or she wants to print. You can use the main function to print ...
全排列的非递归实现。 输入1,2,3,4 得到 [1 2 3 4]..........[4 3 2 1]所有24种排列