易语言使用递归取计算排列组合

计算分组子程序

界面放置三个编辑框,分别输入M,R,第三个编辑框显示组合的个数,一个列表框显示所有的结果。

.版本 2
 
.子程序 计算分组子程序
.参数 参数自然数, 整数型
.参数 参数组合数个数, 整数型
.局部变量 循环变量甲, 整数型
.局部变量 循环变量乙, 整数型
.局部变量 储存文本, 文本型
 
循环变量甲 = 参数自然数
' 顺序选组合的最大数
.判断循环首 (循环变量甲 ≥ 参数组合数个数)
    数组组合 [参数组合数个数] = 循环变量甲
    ' 组合中还有其他元素
    .如果 (参数组合数个数 > 1)
        计算分组子程序 (循环变量甲 - 1, 参数组合数个数 - 1)
    .否则
        ' 将数组数位定位
        循环变量乙 = 位数
        储存文本 = “”
        ' 找到一个组合将其循环显示分组的数
        .判断循环首 (循环变量乙 ≥ 1)
            ' 得到储存文本
            储存文本 = 储存文本 + 到文本 (数组组合 [循环变量乙]) + “,”
            循环变量乙 = 循环变量乙 - 1
        .判断循环尾 ()
        显示列表框.加入项目 (储存文本, )
        ' 累计个数
        计次 = 计次 + 1
    .如果结束
    循环变量甲 = 循环变量甲 - 1
.判断循环尾 ()

调用执行

.版本 2
 
.子程序 _计算图形按钮_被单击
.局部变量 自然数, 整数型
.局部变量 组合数个数, 整数型
.局部变量 询问返回, 整数型
 
位数 = 到数值 (组合数个数编辑框.内容)
自然数 = 到数值 (自然数编辑框.内容)
组合数个数 = 到数值 (组合数个数编辑框.内容)
.如果真 (自然数 ≤ 0 或 组合数个数 ≤ 0)
    ' 必须是大于0的自然数
    信息框 (“必须是大于0的自然数!”, #错误图标, “出现错误了:”)
    返回 ()
.如果真结束
 
.如果真 (自然数 < 组合数个数)
    ' 必须是大于0的自然数
    信息框 (“自然数必须大于等于组合个数!”, #错误图标, “出现错误了:”)
    返回 ()
.如果真结束
 
.如果真 (自然数 > 50)
    询问返回 = 信息框 (“您输入的数值过大,处理数据时程序将会有一段时间无响应,是否继续?”, #是否钮 + #询问图标, “请问:”)
    .如果真 (询问返回 = #否钮)
        返回 ()
    .如果真结束
 
.如果真结束
' 初始化数量
计次 = 0
' 清空
显示列表框.清空 ()
' 调用计算分组子程序()
计算分组子程序 (自然数, 组合数个数)
数量编辑框.内容 = 到文本 (计次)

发布日期:

所属分类: 易语言 标签: