笔者曾写过一个递归与组合的算法(http://www.csdn.net/Develop/read_article.asp?id=23809),下面给出一个排列的递归算法,请大家指教。
Private Sub Command1_Click() ' 列出数组a 的全排列
Dim a(8) As String, temp As String
For i = 0 To 8
a(i) = i
Next
temp = permutation(a, UBound(a))
Debug.Print temp
Debug.Print "共有 " & UBound(Split(temp, vbCrLf)) + 1 & " 种排法!"
End Sub
Function addxtostr(ByVal x0 As String, ByVal xadd As String) As String ' eg: x0: "1,2,3,4",we will add 5 to x0
Dim temp, temp2, all() As String, i As Long
temp = Split(x0, ",")
ReDim all(UBound(temp) + 1)
all(0) = xadd & "," & x0 ' return "5,1,2,3,4"
For i = 1 To UBound(all)
temp2 = temp
temp2(i - 1) = temp2(i - 1) & "," & xadd ' add 5 between every two contunious number
all(i) = Join(temp2, ",")
Next
addxtostr = Join(all, vbCrLf)
Set temp = Nothing
Set temp2 = Nothing
Erase all
End Function
Function permutation(ByRef a() As String, ByVal n As Long) As String '列出数组a 的前n-1 个元素的全排列
Dim i As Long, temp, all() As String
If n = 0 Then permutation = a(0)
If n = 1 Then permutation = a(0) & "," & a(1) & vbCrLf & a(1) & "," & a(0)
If n > 1 Then
temp = Split(permutation(a, n ), vbCrLf) ' 递归
ReDim all(UBound(temp))
For i = 0 To UBound(temp)
all(i) = addxtostr(temp(i), a(n))
Next
permutation = Join(all, vbCrLf)
End If
Erase all
End Function
分享到:
相关推荐
排列的递归算法(递归求*排列*),很简洁。
否则,遍历未排列的部分,将一个元素与当前位置交换,然后对剩下的元素进行递归。在递归返回后,再将交换过的元素恢复到原来的位置,以便进行下一次迭代。 通过这种递归策略,我们可以得到所有可能的排列。由于每次...
### 基于Hadoop用并行递归实现排列组合运算 #### 背景介绍与问题描述 在计算机科学领域,数字排列组合是经典的算法问题之一,它不仅通俗易懂,而且对于初学者来说非常友好。通过这个问题的学习,我们可以很好地...
本例程通过递归法实现了在易语言中获取排列组合的方法,这在处理大量数据或需要进行各种可能性计算的问题时非常有用。 递归法是解决此类问题的经典策略,它通过将问题分解成更小的子问题来解决。在排列组合问题中,...
下面是递归排列算法的详细流程图: 1. 首先,定义一个 perm 函数,用于输出排列的所有序列。 2. 在 perm 函数中,设置一个索引 i,初始值为 0。 3. 判断 i 是否等于 M,如果是,则返回当前排列的所有序列。 4. 如果...
PHP递归实现一位数组的排列算法。欢迎下载和评论。
递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合...
用递归算法实现的简单排列生成器 其中K是开始排列点,m是数组的长度
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 ...
易语言源码递归法取排列组合易语言源码例程.rar 易语言源码递归法取排列组合易语言源码例程.rar 易语言源码递归法取排列组合易语言源码例程.rar 易语言源码递归法取排列组合易语言源码例程.rar 易语言源码递归法...
- **递归与迭代**:文件中的实现结合了递归和迭代的思想,通过递归生成子排列,并通过迭代更新结果。这种方式有效地减少了不必要的递归调用,提高了性能。 - **辅助函数的使用**:`getEstateRowData`、`getRowData`...
这个名为"案例排列组合(递归)"的主题聚焦于如何利用递归方法来实现排列和组合的计算。递归是一种强大的编程技术,它允许函数调用自身以解决复杂的问题。 首先,我们需要理解排列和组合的概念。排列是指从n个不同...
根据给定文件的信息,...通过以上内容,我们详细介绍了Java中m取n排列组合的具体实现方法,包括重复与不重复的情况,以及如何使用for循环嵌套和递归来完成这些任务。这将有助于读者更好地理解和掌握相关的编程技巧。
递归实现排列型枚举.md
递归求解几类排列组合问题 递归是一种常用的算法,它是搜索的另一种实现方式。如果在算法设计中采用一个函数或过程直接或间接地调用它自身来解决问题的方法,则称该方法为递归算法。递归算法必须要设计好一个或若干...
在给定的“递归算法实现随机串和全排列的生成”主题中,我们将深入探讨递归在生成随机字符串和全排列问题中的应用。这里我们将主要关注递归的核心概念、如何生成随机字符串以及如何实现全排列,所有这些都是使用C#...
**算法设计与分析:递归与分治策略** 递归与分治策略是算法设计中的重要方法,它们常用于解决复杂问题。本实验报告主要探讨了三种使用递归策略的算法:Ackerman函数实现、大数划分以及数据集合的排列组合。 1. **...
- **递归排列**:递归是一种函数自我调用的技术,用于解决具有自相似性质的问题。在排列问题中,递归可以用来生成一个集合的所有可能排列。例如,如果集合包含重复元素,我们需要处理这些重复以避免生成重复的排列...
第一次上传,多多支持 棋盘覆盖算法 递归排列 C++实现