递归vba

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

递归是怎么一回事? 递归通俗的讲就是一个函数在其代码中反复调用自身。你应该知道菲波纳契数列,这个数列的定义是:

f(x)=1 (x=1)

f(x)=2 (x=2)

f(x)=f(x-1)+f(x-2) (x>2)

也就是说从第三项开始的每一项的值都等于是前两项之和。这在数学中叫递推数列--高中数学内容。

说到本质的话,递归是一段程序的代码反复效用,把程序的参数等变量保存在一个堆栈里,直到到了边界条件以后再层层返回,将堆栈中的数据弹出计算,最后得到结果。

补充一下,递规包括直接递规和间接递规。直接递规是指在代码中反复调用自身,而间接递规是间接地调用自身。

递归概念最通俗的形象比喻:

打个比方吧,递归法好比是一个军队要通过一个迷宫,到了第一个分岔口,有3条路,将军命令3个小队分别去探哪条路能到出口,3个小队沿着3条路分别前进,各自到达了路上的下一个分岔口,于是小队长再分派人手各自去探路??只要人手足够(对照而言,就是计算机的堆栈足够),最后必将有人找到出口,从这人开始只要层层上报直属领导,最后,将军将得到一条通路。所不同的是,计算机的递归法是把这个并行过程串行化了。

递归算法的基本思想是:

把规模大的、较难解决的问题变成规模较小的、易解决的同一问题。规模较小的问题又变成规模更小的问题,并且小到一定程度可以直接得出它的解,从而得到原来问题的解。

什么是递归函数(recursive function)

递归函数即自调用函数,在函数体内部直接或间接地自己调用自己,即函数的嵌套调用是函数本身。

VB函数递归使用实例链接:

/t/20050125/22/3753710.html

用VB函数Dir实现递归搜索目录实例链接:

/Develop/article/28/68489.shtm

遍历所有文件夹的递归函数(epower2002)

Sub Main()

ProcessDirectory("E:\My Documents")

Console.ReadLine()

End Sub

Private Sub ProcessDirectory(ByVal targetDirectory As String)

If Directory.Exists(targetDirectory) Then

If Directory.GetFileSystemEntries(targetDirectory).Length = 0 Then

' Empty folder

Console.WriteLine("Folder " & targetDirectory & " is empty")

Else

' Recurse subdirectories of this directory

Dim subdirectory As String

Dim subdirectoryEntries As String() =

Directory.GetDirectories(targetDirectory)

For Each subdirectory In subdirectoryEntries

Console.WriteLine("Folder is " & subdirectory)

ProcessDirectory(subdirectory)

Next subdirectory

End If

End If

End Sub

/art/1111/20041219/692239_1.html

查找给定文件夹下的全部文件,递归调用堆栈溢出:

链接:/t/20060303/09/4589903.html

递归算法

用自身的结构来描述自身,称递归

VB允许在一个Sub子过程和Function过程的定义内部调用自己,即递归Sub子过程和递归Function 函数。递归处理一般用栈来实现,每调用一次自身,把当前参数压栈,直到递归结束条件;然后从栈中弹出当前参数,直到栈空。

递归条件:(1)递归结束条件及结束时的值;(2)能用递归形式表示,且递归向终止条件发展。

例:编fac(n)=n! 的递归函数

Function fac(n As Integer) As Integer

If n = 1 Then

fac = 1

Else

fac = n * fac(n - 1)

End If

End Function

递归程序的基本步骤

每一个递归程序都遵循相同的基本步骤:

1. 初始化算法。递归程序通常需要一个开始时使用的种子值(seed value)。要完成此任务,可以

向函数传递参数,或者提供一个入口函数,这个函数是非递归的,但可以为递归计算设置种子值。

2. 检查要处理的当前值是否已经与基线条件相匹配。如果匹配,则进行处理并返回值。

3. 使用更小的或更简单的子问题(或多个子问题)来重新定义答案。

4. 对子问题运行算法。

5. 将结果合并入答案的表达式。

6.返回结果。

递归算法的基本思想

递归算法一般都包含三个基本部分:

1、当前问题Q n

2、从较简单的问题Q n-1到Q n的操作Op n-1

3、已解决的基础问题Q0

这样,当前问题Q n就可以被一步一步化简为:

Q n

Op n-1 + Q n-1

...

Op n-1 + Op n-2 + Op n-3 ... +Q0

这样一些列确定的步骤而最终得到解决。

递归算法解题的一般思路

在一个子程序(过程或函数)的定义中又直接或间接地调用该子程序本身,称为递归。递归是一种非常有用的程序设计方法。用递归算法编写的程序结构清晰,具有很好的可读性。递归算法的基本思想是:把规模大的、较难解决的问题变成规模较小的、易解决的同一问题。规模较小的问题又变成规模更小的问题,并且小到一定程度可以直接得出它的解,从而得到原来问题的解。

利用递归算法解题,首先要对问题的以下三个方面进行分析:

一、决定问题规模的参数。需要用递归算法解决的问题,其规模通常都是比较大的,在问题中决定规模大小(或问题复杂程度)的量有哪些?把它们找出来。

二、问题的边界条件及边界值。在什么情况下可以直接得出问题的解?这就是问题的边界条件及边界值。

三、解决问题的通式。把规模大的、较难解决的问题变成规模较小、易解决的同一问题,需要通过哪些步骤或等式来实现?这是解决递归问题的难点。把这些步骤或等式确定下来。

相关文档
最新文档