• 新浪微博:
  • 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:03-18

按键精灵安卓版
立即下载

软件版本:3.7.0
软件大小:46.2M
更新时间:03-02

按键精灵iOS版
立即下载

软件版本:1.7.7
软件大小:29.2M
更新时间:12-06

按键手机助手
立即下载

软件版本:3.7.7
软件大小:262M
更新时间:08-06

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[问题] 按键精灵写的递归函数,大佬看看怎么解决啊 [复制链接]

1#

Function 获取文件夹路径(path,name)

ret = Lib.文件.遍历指定目录下所有文件夹名(path)

If UBound(ret) = - 1 Then

Goto 退出

End If


For i = 0 To UBound(ret) - 1

TracePrint path & "\" & ret(i)

If ret(i) = name Then

dhPath = path & "\" & name

Goto 退出

Else

获取文件夹路径 path&"\"&ret(i),name

End If



Next



Rem 退出

End Function

2#

用goto rem 代替 return功能 ,程序执行到 goto 时候,不是返回当前递归程序,而是整个递归都结束了, 有什么好的方法实现return或者 查找文件夹的算法

3#

在本地做了测试,并简化了代码,以前的提问可能会对大家判断产生误导,看看新的代码及测试结果.
  1. Function 获取文件夹路径(path)

  2.     ret = Lib.文件.遍历指定目录下所有文件夹名(path)
  3.     If UBound(ret) <> - 1 Then
  4.         For i = 0 To UBound(ret) - 1
  5.             TracePrint path & "\" & ret(i)
  6.             //获取文件夹路径 path&"\"&ret(i)
  7.         Next
  8.     End If    

  9. End Function
复制代码
删除了很多无关的元素直接上面的代码会产生结果
d:\A\BB
d:\A\BBB
d:\A\BBBB
可见执行了一次对A文件夹的遍历
  1. Function 获取文件夹路径(path)

  2.     ret = Lib.文件.遍历指定目录下所有文件夹名(path)
  3.     If UBound(ret) <> - 1 Then
  4.         For i = 0 To UBound(ret) - 1
  5.             TracePrint path & "\" & ret(i)
  6.             获取文件夹路径 path&"\"&ret(i)
  7.         Next
  8.     End If    

  9. End Function
复制代码
将注释解开,执行之后的递归方法
产生结果
d:\A\BB
d:\A\BB\C

这个结果说明递归遇见C文件夹后,没有子文件夹,停止.而后续的其他递归程序也没有了

4#

找到原因了,递归函数里面的局部变量要声明
Dim ret,i

从下级递归返回后找不到变量就退出了

发新话题 回复该主题