ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 香川组合的递归代码

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-8-12 17:39 | 显示全部楼层
本帖已被收录到知识树中,索引项:递归
支持一下,不错的递归

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-27 20:35 | 显示全部楼层
增加一个,元素可重复的组合结果代码:
  1. Dim sj, jg(), m, n, k
  2. Sub 元素可重复组合递归()
  3.     tms = Timer
  4.     m = [a1].End(4).Row
  5.     sj = [a1].Resize(m)
  6.     n = [b1]
  7.     AC = WorksheetFunction.Combin(m + n - 1, n)
  8.     ReDim jg(AC, n)
  9.     k = 0
  10.     Call cfzhdg("", 1, 0)
  11.     [b3] = AC
  12.     [d1].CurrentRegion = ""
  13.     [d1].Resize(AC, n + 1) = jg
  14.     [d1].Resize(, n + 1).EntireColumn.AutoFit
  15.     MsgBox Timer - tms
  16. End Sub
  17. Sub cfzhdg(s$, i, t%)
  18.     If t = n Then
  19.         p = Split(s, ",")
  20.         For j = 1 To n
  21.             jg(k, j) = sj(p(j), 1)
  22.             jg(k, 0) = jg(k, 0) & "," & sj(p(j), 1)
  23.         Next
  24.         jg(k, 0) = Mid(jg(k, 0), 2): k = k + 1: Exit Sub
  25.     End If
  26.     For j = i To m
  27.         Call cfzhdg(s & "," & j, j, t + 1)
  28.     Next j
  29. End Sub
复制代码

元素可重复组合递归.rar

9.58 KB, 下载次数: 138

TA的精华主题

TA的得分主题

发表于 2012-9-27 20:51 | 显示全部楼层
Sub cfzhdg(s$, i, t%)
    If t = n Then
        p = Split(s, ",")
        For j = 1 To n                       '此处可精简
            jg(k, j) = sj(p(j), 1)
            jg(k, 0) = jg(k, 0) & "," & sj(p(j), 1)
        Next
        jg(k, 0) = Mid(jg(k, 0), 2): k = k + 1: Exit Sub
    End If
    For j = i To m
        Call cfzhdg(s & "," & j, j, t + 1)
    Next j
End Sub

TA的精华主题

TA的得分主题

发表于 2012-9-27 20:56 | 显示全部楼层
本帖最后由 彭希仁 于 2012-9-27 20:58 编辑

用到递归了,其实就可以不用FOR

不重复的组合类似于二进制的组合,有1的就要嘛,0的就不要嘛。

递归只要做到一生二,二生四,四生八


TA的精华主题

TA的得分主题

发表于 2012-12-30 08:24 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-3-7 23:11 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-3-8 08:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
作个记号,学习一下。

TA的精华主题

TA的得分主题

发表于 2013-3-9 13:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
{:soso_e135:}我想玩转这些数字

TA的精华主题

TA的得分主题

发表于 2013-3-25 16:20 | 显示全部楼层
作记号,弄明白了递归再来看

TA的精华主题

TA的得分主题

发表于 2013-3-25 16:49 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 00:34 , Processed in 0.040128 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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