ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

   
高效办公必会的Office实战技巧 永久免费,网表让Excel秒变数据库 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! 国内首部Excel函数公式学习大典 职场充电黑科技, Office微视频教程 免费下载Excel行业应用视频
300集Office 2010微视频教程 Tableau-数据可视化工具 突破Excel限制,用活字格提高效率 12门Excel免费公开课任你学
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 免费的Excel考勤计算系统
查看: 270|回复: 12

[原创] 跟着香川再做递归组合之新思路

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-11-13 23:09 | 显示全部楼层 |阅读模式
本帖最后由 aoe1981 于 2017-11-13 23:24 编辑

  说起组合代码,香川是高手,我是香川引入门的。
  香川生成组合的办法很多,我只较多地研究了递归组合。之前曾依样葫芦,做了一些,但毕竟没有新意,只为了学习递归。
  如今忽然有了灵感,想到了新思路,便又做了一个,贴出来,大家多担待。我之管见,所谓“新思路”或许并非前所没有,甚或是被唾弃的,而我却误打误拾。至少,再一次算做练习。

  附件如下(一个高版本,一个低版本):
   递归组合新思路aoe1981.zip (51.74 KB, 下载次数: 49)

评分

参与人数 2财富 +10 鲜花 +3 收起 理由
sayhi95 + 3 aoe老师重出江湖
huang1314wei + 10 优秀作品

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-11-13 23:12 | 显示全部楼层
本帖最后由 aoe1981 于 2017-11-13 23:25 编辑

  有图更直接:
   360截图-13089825.jpg

  使用说明:
  1.在元素列添加或减少元素,元素总数由公式自动计算,各元素之间不要留空行。
  2.只需设置抽取数,为任意整数。
  3.抽取数n>=0且n<=m时,输出combin(m,n)组合结果;
   抽取数n<0或n>m时,输出2^m组合结果。
  4.道理如下:
   2^m=combin(m,0)+combin(m,1)+combin(m,2)+……+combin(m,m)
   二项式定理的特例。
  5.元素连接符的作用是,当各元素长度不一时,防止输出部分结果时出现错误;元素连接符不能与元素本身重复,且连接符的长度只能为1,否则输出部分结果时出错。
  6.由于2^20=1048576,请不要在元素个数超过20个的情况下生成所有组合结果。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-11-13 23:19 | 显示全部楼层
  其实,我的递归组合的核心代码可以更简洁的。只是在输出部分组合(即m选n组合)时,当元素长度不统一时,便会出错。因为,我的思路是先产生2^m个全部组合,然后从中选取相应的m选n组合。如果只关注部分组合的话,这实在是舍近求远。但我的初衷是为了产生全部组合。
  为了增加灵活性,防止输出部分组合时的错误,我便加入了连接符,代码一下子复杂了,好在基本结构没有变化,但也差点被虐哭。
  ……
  好的,我交待完了。希望大家指点下。
头像被屏蔽

TA的精华主题

TA的得分主题

发表于 2017-11-14 08:26 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-11-14 09:45 | 显示全部楼层
aoe1981 发表于 2017-11-13 23:19
  其实,我的递归组合的核心代码可以更简洁的。只是在输出部分组合(即m选n组合)时,当元素长度不统一时 ...

好久不见,
这是重出江湖啊

TA的精华主题

TA的得分主题

发表于 2017-11-14 10:13 | 显示全部楼层
m选n “所有组合” 不就是增加外循环

for n= 0 to m
    call dgzh(m,n)
next

TA的精华主题

TA的得分主题

发表于 2017-11-14 10:15 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-11-14 10:32 | 显示全部楼层
zopey 发表于 2017-11-14 10:13
m选n “所有组合” 不就是增加外循环

for n= 0 to m

也对,也对,多重复几次……

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-11-14 10:33 | 显示全部楼层
liulang0808 发表于 2017-11-14 09:45
好久不见,
这是重出江湖啊

不敢不敢,很多东西都忘了……只是记着泡论坛的快乐和充实……

TA的精华主题

TA的得分主题

发表于 2017-11-14 12:23 | 显示全部楼层
aoe1981 发表于 2017-11-13 23:19
  其实,我的递归组合的核心代码可以更简洁的。只是在输出部分组合(即m选n组合)时,当元素长度不统一时 ...

什么算法,递归组合,听来由来已久,只是还没有领悟,可能在依葫芦花样的“模仿”中,已经接触过,由于不曾入心,所以“老朋友”也会失之交臂,今后有请教的地方还望“后起之秀”的大侠指教。
您需要登录后才可以回帖 登录 | 免费注册 新浪微博登陆

本版积分规则

关闭

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

关注官方微信,每天坐享新鲜教程

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

GMT+8, 2017-11-23 09:34 , Processed in 0.889168 second(s), 27 queries , Gzip On, MemCache On.

Powered by Discuz! X3.3

© 2001-2017 Wooffice Inc.

   

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

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

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