ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 递归算法的一般形式

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-3-9 11:29 | 显示全部楼层
小心走火入魔,因为递归容易令人思路进入死循环状态

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-9 11:44 | 显示全部楼层
1)递归的独家绝技
   无限循环体,可简单看成for语句的无限嵌套。

2)注重思想,不关注内部细节
  “无忌,我教你的还记得多少?”“回太师傅,我只记得一大半”
  “那,现在呢?”“已经剩下一小半了”
  “那,现在呢?”“我已经把所有的全忘记了!”
  “好,你可以用递归了…”

3)递归程序内只有两处会影响到输出,递和归
   递,在满足结束条件之前。通过判断让程序总是进入某个if分支,直至满足结束条件(递终结之日,归开始之时)
   归,在满足结束条件之后。

   为了保证输出简单、连续、不乱
   3-1 简单情景写在最前  
   3-2 递归语句后不输出
   3-3 要么只在递中输出,要么只在归中



这里理解可以吗

TA的精华主题

TA的得分主题

发表于 2019-3-9 11:53 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-3-9 12:41 | 显示全部楼层
爱疯 发表于 2019-3-9 11:23
Sub test4()
    Call dg4(1, 1)
End Sub

这个问题,必须设一个参数控制层数,而不是每层设一个参数,那不如直接数组循环了

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-9 17:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Dim sj, jg(), m&, n&, k&
Sub test()    'by kagawa
'    sj = Array("1", "2", "3", "E", "D")
    sj = Array(1, 2, 3)
    m = UBound(sj) + 1    '元素个数
    n = m    '从m个数中取n个的排列
    ReDim jg(m ^ n, 0)
    k = 0
    Call dgMN3("", 1)
    '    [a1].CurrentRegion = ""
    '    [a1].Resize(k) = jg
    '    MsgBox k
End Sub

'递归(结果, 层数)
Sub dgMN3(r$, t&)
    Dim i&
    For i = 0 To m - 1    '1. 随着递归层数的改变,指定元素sj(i)跟着改变
        '2. 如果注释循环体,没有递归,结果只是普通调用

        If t < n Then
            Debug.Print "递", sj(i)    '3. 递不输出
            Call dgMN3(r & sj(i), t + 1)
        Else
            Debug.Print "归", sj(i), r & sj(i)    '4. 归才输出
            '            jg(k, 0) = "'" & r & sj(i)
            '            k = k + 1
        End If

    Next
End Sub




翻到了以前群子老师的方法,这题是if套for,还有其它题解答for套if。
虽仍不是很理解,但至少比自己上次看到时好点。
所以那还是慢慢看好了,因为随着这种好一点的感觉慢慢增多,也就能理解的更多吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-10 08:15 | 显示全部楼层
wzsy2_mrf 发表于 2019-3-9 11:53
可以参考一下我刚刚写的递归程序,很典型的树形搜索
http://club.excelhome.net/thread-1464825-1-1.html

谢谢 wzsy2_mrf!

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-10 08:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
micch 发表于 2019-3-9 12:41
这个问题,必须设一个参数控制层数,而不是每层设一个参数,那不如直接数组循环了

1. 嵌套循环的层数

由9楼和20楼可知
1层循环,递归1次
2层循环,递归2次
3层循环,递归3次
...
m层循环,递归m次。顺序执行m次,相当于单层循环m次




2. 嵌套循环的每层次数

仍是if的条件




其余没想好

TA的精华主题

TA的得分主题

发表于 2023-8-14 15:51 | 显示全部楼层
小花鹿 发表于 2019-3-8 21:02
学递归应该找一个合适的例子,下面这个例子就很好:

递归练习.zip (88.48 KB, 下载次数: 0)


练习!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-24 01:20 , Processed in 0.042938 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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