ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: liu-aguang

[原创] 精通递归程序设计(VBA)--写给非科班VBA爱好者

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2018-8-28 21:15 | 显示全部楼层
本帖已被收录到知识树中,索引项:递归

留个脚印,到时来学习!

TA的精华主题

TA的得分主题

发表于 2018-8-29 08:17 | 显示全部楼层
第一次解除这个概念,学习一下!!!

TA的精华主题

TA的得分主题

发表于 2018-10-19 09:50 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-10-19 12:54 | 显示全部楼层
我对递归的理解:
1、sub 未执行完,再执行sub .
2、有多少sub 就有多少end sub.
3、最后一个end sub后,接着执行上一个未完的sub的参数。
4、了解了这个执行过程,就可以考虑算法了。

TA的精华主题

TA的得分主题

发表于 2018-12-31 10:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

祝老师新年快乐!

TA的精华主题

TA的得分主题

发表于 2019-3-16 18:25 | 显示全部楼层

折半法查找某值并返回在数组中的索引值,有个问题就是如何判断是否溢出?如数据只有1~15,我却搜索115,如何让其不查找?find ? in?

我想到的是findb(arr,mb)<=0 then msgbox("文本不存在") exit sub

但是如何在递归中用递归的方式实现呢。。。

  1. Function f(arr, mb As Integer, s As Integer, w As Integer) As Integer
  2.    
  3.     Dim temp As Integer
  4.     temp = Int((s + w) / 2)
  5.     If (arr(temp) = mb) Then
  6.         f = temp
  7.     Else
  8.         If (arr(temp) > mb) Then
  9.         
  10.             f = f(arr, mb, s, temp)
  11.             
  12.         
  13.         Else
  14.         
  15.             f = f(arr, mb, temp, w)
  16.         
  17.         End If
  18.     End If

  19. End Function
复制代码

  1. Sub a()
  2. Dim arr
  3.     arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
  4.     Debug.Print f(arr, 10, LBound(arr), UBound(arr))
  5. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2019-3-16 19:17 | 显示全部楼层
本帖最后由 wzsy2_mrf 于 2019-3-16 19:18 编辑
易人之言 发表于 2019-3-16 18:25
折半法查找某值并返回在数组中的索引值,有个问题就是如何判断是否溢出?如数据只有1~15,我却搜索115, ...
  1. Option Explicit
  2. Function f(arr, mb As Integer, s As Integer, w As Integer) As Integer
  3.     Dim temp As Integer
  4.     If s > w Then f = -1: Exit Function
  5.     temp = Int((s + w) / 2)
  6.     If (arr(temp) = mb) Then
  7.         f = temp
  8.     Else
  9.         If (arr(temp) > mb) Then
  10.             f = f(arr, mb, s, temp - 1)
  11.         Else
  12.             f = f(arr, mb, temp + 1, w)
  13.         End If
  14.     End If
  15. End Function
  16. Sub a()
  17. Dim arr, a
  18.     arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
  19.     a = f(arr, 115, LBound(arr), UBound(arr))
  20.     If a = -1 Then MsgBox "文本不存在"
  21. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2019-3-18 15:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

    If s > w Then f = -1: Exit Function

这一句是与我的代码有区别的地方,可以实现我要的功能,谢谢!

TA的精华主题

TA的得分主题

发表于 2019-5-13 16:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-5-13 20:18 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-23 21:34 , Processed in 0.043531 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表