小弟刚学递归,请问一个简单的递归问题~
比如我要在 D:/abc 下面递归建立3层的文件夹,每个文件夹里面建3个,再在这3个里面分别再建3个。。。一直递归建到第3层
就像。。。大概思路。。
1.Mkdir "D:/abc "
2.做一个SUB, dgMkFold(FoldDir as string,n as integer)
FoldDir 就是在这个目录下建立递归,n就是为了标明建到了第几层,比如这里初始n=3
。。然后判断。。。比如if n> 1 然后继续递归。。。
主要卡在的地方就是,不知道如何往下读文件夹,用filename=Dir(FoldDir,vbDirectory)之类的也很难读出来
还有一个问题,就不知道建完之后应该如何回溯,我想我想要的应该是深度优先算法把。。
[解决办法]
什么叫做“不知道如何往下读文件夹”?
另外
这种问题深度优先广度优先都是一样的。回溯也不用管,创建一个递归函数,只要边界处理得当,函数调用完了之后会自动回到上一层。
[解决办法]
Option Explicit
Sub dgMkFold(FoldDir As String, n As Integer)
If n > = 3 Then Exit Sub '递归返回条件
On Error Resume Next
'创建子目录
MkDir (FoldDir & "\1 ")
MkDir (FoldDir & "\2 ")
MkDir (FoldDir & "\3 ")
'递归调用, 创建子目录的子目录
dgMkFold FoldDir & "\1 ", n + 1
dgMkFold FoldDir & "\2 ", n + 1
dgMkFold FoldDir & "\3 ", n + 1
On Error GoTo 0
End Sub
Private Sub Command1_Click()
'创建主目录
MkDir "d:\aaa "
dgMkFold "d:\aaa ", 1
End Sub
[解决办法]
楼上正解
深度优先广度优先和递归无关啊,lz应该先好好理解算法的思想,再来写程序
我接分~