vb递归算法
Ⅰ 关于全组合算法
参照我的回答:VBA 6~15个数中,任选6个数排列组合:http://..com/question/289742264.html
调整一下递归函数Private Sub zuhe(L As Integer, M As Integer)调用的M参数取值(可重复与不可重复有一点区别)
Ⅱ 二级VB中的一些专业术语很难懂
笛卡儿乘积:
设D1,D2,…,Dn为n个任意集合。定义D1,D2,…,Dn的笛卡尔乘积为:
D1×D2×… ×Dn = {(d1,d2,…,dn) | di ∈Di,i= l,2,…,n}
算法:
求解问题类的、机械的、统一的方法,它由有限多个步骤组成,对于问题类中的每个给定的具体问题,机械地执行这些步骤就可以得到问题的解答。算法的这种特性,使得计算不仅可以由人,而且可以由计算机来完成。用计算机解决问题的过程可以分成三个阶段:分析问题、设计算法和实现算法。
中国古代的筹算口决与珠算口决及其执行规则就是算法的雏形,这里,所解决的问题类是算术运算。古希腊数学家欧几里得在公元前3世纪就提出了一个算法,来寻求两个正整数的最大公约数,这就是有名的欧几里得算法,亦称辗转相除法。中国早已有“算术“、“算法”等词汇,但是它们的含义是指当时的全部数学知识和计算技能,与现代算法的含义不尽相同。英文algorithm(算法)一词也经历了一个演变过程,最初的拼法为algorism或algoritmi,原意为用阿拉伯数字进行计算的过程。这个词源于公元 9世纪波斯数字家阿尔·花拉子米的名字的最后一部分。
在古代,计算通常是指数值计算。现代计算已经远远地突破了数值计算的范围,包括大量的非数值计算,例如检索、表格处理、判断、决策、形式逻辑演绎等。
在20世纪以前,人们普遍地认为,所有的问题类都是有算法的。20世纪初,数字家们发现有的问题类是不存在算法的,遂开始进行能行性研究。在这一研究中,现代算法的概念逐步明确起来。30年代,数字家们提出了递归函数、图灵机等计算模型,并提出了丘奇-图灵论题(见可计算性理论),这才有可能把算法概念形式化。按照丘奇-图灵论题,任意一个算法都可以用一个图灵机来实现,反之,任意一个图灵机都表示一个算法。
按照上述理解,算法是由有限多个步骤组成的,它有下述两个基本特征:每个步骤都明确地规定要执行何种操作;每个步骤都可以被人或机器在有限的时间内完成。人们对于算法还有另一种不同的理解,它要求算法除了上述两个基本特征外,还要具有第三个基本特征:虽然有些步骤可能被反复执行多次,但是在执行有限多次之后,就一定能够得到问题的解答。也就是说,一个处处停机(即对任意输入都停机)的图灵机才表示一个算法,而每个算法都可以被一个处处停机的图灵机来实现。
二叉数:
二叉数为一递归数据类型,由一个根节点引出,每个节点有两支,每支也是一棵二叉数
Ⅲ VB阶乘的算法
求阶乘的两种算法
方法一(计数循环)
使用For语句。
Function Factorial(n As Integer) As Long
On Error GoTo Hander
Dim i As Long
Factorial = 1
For i = n To 1 Step -1
Factorial = Factorial * i
Next i
Exit Function
Hander:
MsgBox "数值过大!", vbExclamation, "Error"
Resume Next
End Function
方法二(递归)
简单地说,递归就是一个过程调用过程本身。
思路为:n! = n * (n-1)!
Function Factorial(n As Integer) As Long
On Error Goto Hander
If n > 0 Then
Factorial = n * Factorial(n - 1)
Else
Factorial = 1
End If
Exit Sub
Hander:
Msgbox "数值过大!",vbExclamation,"Error"
Resume Next
End Function
例如,当 n=5 时,求 Factorial(5) 的值变为 5 * Factorial(4)。而 Factorial(4) 又可变为 4 * Factorial(3) ......,Factorial(2)又可变为 2 * Factorial(1),这时 Factorial(1) = 1 已知,递归调用停止,其执行结果为 5 * 4 * 3 * 2 * 1,即 5! 。
过程中还是用了错误陷阱(On Error...),以防数值过大发生溢出错误。