ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-8 17:08 | 显示全部楼层
zopey 发表于 2019-3-8 16:49
递归是一种逻辑思想,将一个大工作分为逐渐减小的小工作 ,当工作量足够小的时候,就要动手去完成它(终止 ...

谢谢 zopey !

的确,这是递归的思想
希望这次能学会高手们的方法

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-8 17:15 | 显示全部楼层
不知2层循环最容易理解的,但不必是最好的递归写法,是怎么写的

TA的精华主题

TA的得分主题

发表于 2019-3-8 17:41 | 显示全部楼层
循环不一定要用到的,因为递归逻辑里没有需要循环的地方,只是一般大多数的递归搜索计算都是用循环对比来解决而已。
递归的重点就是判断结束,判断到之后,返回就是了,用Exit可以返回,所以不一定要用到Else

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-8 18:30 | 显示全部楼层
Sub test2()
    Call dg(1)
End Sub

Sub dg(i)
    If i > 5 Then
        Exit Sub
    Else
        Debug.Print i
        Call dg(i + 1)
    End If
End Sub


和9楼,10楼效果一样,只是模样更像些1楼形式

TA的精华主题

TA的得分主题

发表于 2019-3-8 18:34 | 显示全部楼层
http://club.excelhome.net/forum. ... 531&pid=7806716

推荐看看香川老师的递归帖子,搜能搜到很多,也有讲基础的,也有比较高深的

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-8 18:46 | 显示全部楼层
micch 发表于 2019-3-8 18:34
http://club.excelhome.net/forum.php?mod=redirect&goto=findpost&ptid=1145531&pid=7806716

推荐看看 ...

谢谢 micch !
群子老师以及高手们的答案虽好,但我还没找到觉得好理解的
我再想,再找

TA的精华主题

TA的得分主题

发表于 2019-3-8 18:55 | 显示全部楼层
爱疯 发表于 2019-3-8 18:46
谢谢 micch !
群子老师以及高手们的答案虽好,但我还没找到觉得好理解的
我再想,再找

我看了应该有一个月了,一直理解不了,不过刚刚这个链接是我唯一能理解的一个,练习了几次了。

我的方法是,如果能理解n选m的数组循环,再理解递归就好一点。
for a = 1 to 6
for b = 2 to 7
for c =  3 to 8
for d = 4 to 9
      s=a+ b +c +d
next d,c,b,a

4层循环,可以直接用递归循环代替

TA的精华主题

TA的得分主题

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

QQ图片20190308210148.png

TA的精华主题

TA的得分主题

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

谢谢 小花鹿!

我觉得这是一个好的应用例子,但对学习的节奏来说
有跳过了的感觉,跳过了些该理解而没讲到的环节。就像听懂了第1第2节,但没听到第3第4节,就抛出了第5节的课了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-9 11:23 | 显示全部楼层
Sub test4()
    Call dg4(1, 1)
End Sub
'递归,2层for
Sub dg4(i, j)
    Debug.Print i, j
    If j < 5 Then Call dg4(i, j + 1):  Exit Sub
    If i < 5 Then j = 1: Call dg4(i + 1, j)
End Sub



Sub test5()
    Call dg5(1, 1, 1)
End Sub
'递归,3层for
Sub dg5(i, j, k)
    Debug.Print i, j, k
    If k < 5 Then Call dg5(i, j, k + 1): Exit Sub
    If j < 5 Then k = 1: Call dg5(i, j + 1, k): Exit Sub
    If i < 5 Then j = 1: Call dg5(i + 1, j, k)
End Sub


虽然达到了题目要求,但显然随着嵌套层次增加,递归程序就会越来,越长、复杂,即不通用。

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

本版积分规则

关闭

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

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

GMT+8, 2024-4-25 12:37 , Processed in 0.038148 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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