案列: 给定n个数,取任意g个数之和等于h的组合。

采用递归的方式实现:

Option Explicit
Dim arr1(1 To 10000, 1 To 1) As String
Dim k, g, h As Integer
Dim arr
Dim k1 Sub merge()
k = 0
Dim t
t = Timer
Erase arr1 ' 清空数组中数据
arr = Range("a2:a" & Range("a65535").End(xlUp).Row)
g = [b2] '个数
h = [c2] '和
zuhe 1, 0, "", 0
Range("d2").Resize(k) = arr1
[e1] = k1
MsgBox "找到" & k & "个解!花费" & Format(Timer - t, "0.00") & "秒" End Sub
Sub zuhe(x%, z%, sr$, gg As Byte)
If z + arr(x, 1) = h And gg = g - 1 Then
k = k + 1
arr1(k, 1) = sr & arr(x, 1) & " = " & h
Exit Sub
End If
If x < UBound(arr) And z < h Then
If z + arr(x, 1) < h Then
zuhe x + 1, z + arr(x, 1), sr & arr(x, 1) & "+", gg + 1
End If
zuhe x + 1, z, sr, gg
End If
End Sub

  递归依次取数,满足x < UBound(arr),And z < h,执行语句

zuhe x + 1, z + arr(x, 1), sr & arr(x, 1) & "+", gg + 1  '取出 

zuhe x + 1, z, sr, gg   '释放

arr1(k, 1) = sr & arr(x, 1) & " = " & h     '生成的符合条件的组合存在arr1中, 

过程:

遍历(不断的取值和释放值)后得到符合条件的组合。

递归(VBA实现)的更多相关文章

  1. VBA提高速度的技巧

    此贴原转自EH论坛,我自己有所修改 [编者按]速度是程序设计永恒的热门话题,虽然速度技巧在各种语言之间可以相互借鉴,但差别有时也会很大,比如VC中由于字符串的存储方式决定了判断空串使用len函数更快, ...

  2. vba编程基础2

    安装office2010的时候, 最好是 完全安装/完整安装 , 这样可以查阅 excel的 "帮助文档" 帮助文档中包含了更多的/更详细的 参考信息. 普通模块无事件, 只有 子 ...

  3. VBA Dumper v0.1.4.2, 提取office文档中的VBA代码,监查宏病毒恢复代码(演示版

    http://club.excelhome.net/thread-970051-1-1.html VBA Dumper 0.1.4.2更新,填补国内同类程序空白 此程序为演示版,可以在无office的 ...

  4. 3.编写sub过程及开发函数——《Excel VBA 程序开发自学宝典》

    3.1 编写sub过程 实例: Sub 建立10个表() If sheets.count>=10 then exit sub Sheets.add , sheets(sheets.count) ...

  5. VBA的过程及参数详解

    VBA的过程及参数详解 VBA中的过程(Procedure)有两种,一种叫函数(Function),另外一种叫子程序(Subroutine),分别使用Function和Sub关键字.它们都是一个可以获 ...

  6. 报表研究之工具篇-VBA

    最近一直在研究VBA,写报表的工作.将所得的知识,经验总结一下,与大家分享. 工具篇,VBA 1.EXCEL一个最好用的功能就是录制宏,当一个函数拿不准要怎么写,用什么函数表示的时候,录制就帮了大忙了 ...

  7. VBA学习笔记

    这是一个学习VBA编程的学习笔记. 一. 介绍 二. 使用手册 2.1. 如何在Excel2010中开始使用VBA? 2.2. 如何使用VBA编辑器进行编程? 三. 语法说明 3.1 数据类型 3.2 ...

  8. dos命令在vba中应用

    正常情况下想要遍历文件夹和子文件夹,可以采用递归的方式 Sub ListFilesTest() With Application.FileDialog(msoFileDialogFolderPicke ...

  9. VBA For Each循环

    For Each循环用于为数组或集合中的每个元素执行语句或一组语句.For Each循环与For循环类似; 然而,For Each循环是为数组或组中的每个元素执行的. 因此,这种类型的循环中将不存在步 ...

随机推荐

  1. VUE - vue.runtime.esm.js?6e6d:619 [Vue warn]: Do not use built-in or reserved HTML elements as component i

    <script> export default {     name:'header'       //  不要使用内置或保留的HTML元素 , 改为Header或者置或保留的HTML元素 ...

  2. prepareRefresh方法源码跟踪

    看这篇文章之前可以先了解之前的跟踪流程,https://www.jianshu.com/p/4934233f0ead 代码过宽,可以shift + 鼠标滚轮 左右滑动查看 AbstractApplic ...

  3. java随记 2月16

    1.a=a+b 等于 a+=b ,且a+=b隐含强制类型转换 2.^ 表示异或   两个二进制同号为假,异号为真    即 0^0=0,1^1=0,0^1=1 3.三元运算    布尔表达式 ?表达式 ...

  4. 《新标准C++程序设计》4.4(C++学习笔记14)

    运算符重载为友元函数 一般情况下,将运算符重载为类的成员函数,是较好的选择. 但有时,重载为成员函数不能满足使用要求,重载为普通函数,又不能访问类的私有成员,所以需要将运算符重载为友元. class ...

  5. DCGAN生成目标训练图片

    前言: GAN的原理很简单,但是它有很多变体,如:DCGAN.CycleGAN.DeblurGAN等,它们也被用在不同地方,本文将用到DCGAN来生成头像图片,可以做到以假乱真的地步. 1.首先调用程 ...

  6. 标准C的标记化结构初始化语法

    1 struct file_operations { 2         struct module *owner; 3         loff_t (*llseek) (struct file * ...

  7. B. RGB plants

    B. RGB plants time limit per test 2.0 s memory limit per test 64 MB input standard input output stan ...

  8. java 根据值获取枚举对象

    关键方法: /** * 值映射为枚举 * * @param enumClass 枚举类 * @param value 枚举值 * @param method 取值方法 * @param <E&g ...

  9. Spring入门之三-------SpringIoC之Scopes

    一.singleton和prototype public class Bean1 { public Bean1() { System.out.println(this.getClass().getSi ...

  10. CSS - flex 垂直水平居中

    display: flex; justify-content: center; /* 水平居中 */ align-items: center; /* 垂直居中 */