多语言展示
当前在线:1466今日阅读:26今日分享:39

As3怎样用递归求全排列-->张志晨as3教程系列

递归算法是一种思想方法,不独属于哪一种语言的专利。算法的发明是学术家的事,作为使用语言编程的码民而言,目标是如何运用算法,实现自己的愿望。然而实现算法的方式,仍然有技巧可言。关于全排列算法的实现,我在网上搜索了一下,语言有C的、Vc的、VB的、Java的,就是没有as3的。于是我用递归思想,用as3语言,写了一个的求全排列算法。测试效果:爽!
工具/原料

win7+as3+递归思想

步骤/方法
1

递归算法原理以4个元素为例,求4个元素的全排列,其实就是从4个元素中任取一个(有4种可能,所以下图有四个方阵,这是第一层循环),放在前面,打头的。然后在后面加上其余3个元素的全排列。3个元素:任取1个元素(有三种可能,所以每个方阵中的第二列有3个前缀,这是第二层循环),其后跟剩下2个元素位的全排列。2个元素:任取1个元素(有两种可能,所以每个方阵中的第三列有2个前缀,每个前缀后面跟着一个后缀,这是每三层循环),其后跟剩下1个元素位的全排列。1个元素时,完成全排列。故全排列有4*3*2*1=24种。这样总是有两部分元素,一部分为前面的已经取出来的队列,另一部分为后面即将进行的全排列的队列。这就需要定义两个参数:前面已经取出来的队列,初始为空数组[];后面将要进行排列的队列,初始为原数组。

2

3

构建函数框架 函数名称:permutation[pə:mju'teiʃən]排列的意思。参数命名:参数:pre,前缀,已经取出的元素队列。参数:nex,后缀,将要进行排列的元素队列。基本结构:functionpermutation(pre:Array,nex:Array) {1.如果剩下的元素为1个,就输出一个排列,就退出本层次循环,返回上一层,从上一层进入新的下一层,而不是结束;3.否则,进入本层的下一层,要做的事情是:必须先拷贝两个参数(都是数组)。用拷贝来的数组工作:从后缀中取出并删除从中删除一个元素,压入前缀元素队列之尾部。然后调用自己进行递归。}图中示意的是第一层循环中四个分支中的第一个分支,可以看出共有6个排列。图中的右向箭头表明进入下一层循环。左向箭头表示返回上一层循环。箭头从前缀1开始,经过六次递归,最终返回到起点,共找到6种排列。沿着箭头畅游一番,你会感受到递归的每一个细节及其微妙之处。

4

5

代码实现算法functionpermutation(pre:Array,nex:Array) {var j:uint=nex.length;if (j==1) {var t=[];for (var i:uint=0;i

6

7

养成注释习惯好记性不如烂笔头。时间一长,代码的用法、各部分组件的意义就可能忘记。所以码民要养成良好的注释习惯。经验:函数的注释在函数的头部;功能块的注释在功能块的前边;行代码的注释在代码的后边。functionpermutation(pre:Array,nex:Array) {//permutation[pə:mju'teiʃən]排列//参数:pre为前缀,初始为空//参数:nex为后缀,初始为原始数组//用法:permutation([],[1,2,3,4]);//如果只有一个元素,就是完成了一个排列,要返回上层。var j:uint=nex.length;if (j==1) {var t=[];for (var i:uint=0;i

8

9

函数用法示例题目:用数学卡片2,3,5可以组成哪些三位数?首先设置出口:var all=[]//用数组存放所有的结果,全排列接着把出口做进函数里:function permutation(pre:Array,nex:Array) {var j:uint=nex.length;if (j==1) {var t=[];for (var i:uint=0;i

10

11

来自实践的体会 绝对原创的经验

12

作者:张志晨

13

2012.5.12

推荐信息