递归与排列

原创 2004年04月07日 22:15:00

笔者曾写过一个递归与组合的算法(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

分治策略(递归,排列问题)

1、递归概念       直接或者间接调用自身的算法叫做递归算法。用函数自身给出定义的函数称为递归函数。有些数据结构,比如二叉树等,由于自身固有的递归特性,特别适合用递归来描述。        递归算...
  • Robin__Chou
  • Robin__Chou
  • 2015年03月05日 17:40
  • 1808

递归和分治策略之排列问题

排列问题: 设R={r1,r2,r3,......,rn}要进行排列的n个元素,Ri=R-{ri}。集合X中的元素的全排列记为Perm(X)。R的全排列可归纳为如下: 当n=1时,Perm(R)=(r...
  • zly412934578
  • zly412934578
  • 2017年09月12日 14:20
  • 221

全排列递归方法

(一)递归的全排列算法 (A、B、C、D)的全排列为 1、A后面跟(B、C、D)的全排列 2、B后面跟(A、C、D)的全排列(A与B交换,其他次序保持不变) 3、C后面跟(B、A、D)的全排列(...
  • axiqia
  • axiqia
  • 2016年03月24日 00:19
  • 3158

排列与组合的关系

Amn=n!(n−m)!=(n−m+1)⋅…⋅(n−1)⋅n A_n^m=\frac{n!}{(n-m)!}=(n-m+1)\cdot \ldots \cdot (n-1)\cdot n 所以当分母部...
  • lanchunhui
  • lanchunhui
  • 2016年07月09日 22:45
  • 875

python 全排列 递归中的两种实现

我所知道的全排列有四种: 1.迭代的排列组合全排列(非递归):字典序的大小,即传说中的A33 2.邻位置对换的全排列(非递归): 方法一:生成下一个排列,该方法对重复元素同样有效 如果可以根据...
  • u013993712
  • u013993712
  • 2017年11月20日 23:01
  • 242

递归和分治思想解全排列问题

递归与分治算法之字符全排列 一、问题描述 设R={r1,r2,r3,...rn}是要进行全排列的n个元素,设Ri =R-{ri}.集合X中元素的全排列记为Perm(X)。(ri)Perm(...
  • baidu_20363843
  • baidu_20363843
  • 2015年12月02日 16:28
  • 1457

分治与递归法:全排列问题

分治与递归法:全排列问题 1、解决代码 #include using namespace std; // 交换 template inline void Swap(Type &a, Type &...
  • u010043538
  • u010043538
  • 2015年12月08日 23:25
  • 826

递归分治算法之全排列(C语言)

递归与分治算法之字符全排列 一、问题描述 设有数组char a[]={‘a’,’b’,’c’,’d’,’e’,’f’}; 设计一个程序来实现数组中所有的字符组成的有序序列输出。例如‘a’,‘b’组...
  • change_angle
  • change_angle
  • 2016年03月05日 10:40
  • 1495

枚举排列 -- 刘汝佳《算法竞赛入门经典》

先给个基本方法,适用于序列中无重复元素的情况。 思想:一个一个生成,每次生成时,看该元素在前面有没有存在过 例如,生产第k个元素时,在1~n-1中找,前k-1个元素中没出现过的最小元素,给到a[k]。...
  • wsyxhwj
  • wsyxhwj
  • 2016年05月29日 21:16
  • 939

Recursive backtrack & Non-recursive backtrack & Subset Tree & Permutation Tree 递归回溯与非递归回溯 排列树与子集树

Backtracks are usually written as recursive programs, the general solution is : void backtrack(int t...
  • taoqick
  • taoqick
  • 2014年03月25日 15:27
  • 992
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:递归与排列
举报原因:
原因补充:

(最多只允许输入30个字)