VBA编写递归函数实现动态数组组合乘积求和的结构问题咨询
VBA递归实现可变参数的组合乘积之和计算
你需要实现的是s阶初等对称和计算逻辑,即从k个元素中任选s个做乘积,再将所有乘积相加,支持s和k参数动态调整。
原代码核心问题
- 递归参数设计错误,未传递中间计算状态,每次递归都会重新初始化数组、变量,不同递归层级的数据完全隔离
- 未明确递归分支逻辑,组合类递归的核心是区分「选当前元素」和「不选当前元素」两种场景
- 缺少明确的递归终止条件,返回值逻辑混乱
调整后实现代码
' 定义全局数组存储因子,也可根据需求改为参数传入 Private P As Variant Sub SuPC() Dim k As Long, s As Long k = 8 s = 2 ' 初始化因子数组 P = Array(1 / 2, 1 / 3, 1 / 4, 1 / 5, 1 / 6, 1 / 7, 1 / 8, 1 / 9) ' 调用递归函数,结果写入J11单元格 Range("J11") = HSum(k, s) End Sub ' 递归函数:返回前n个元素的m阶对称和 Function HSum(n As Long, m As Long) As Double ' 终止条件1:选0个元素,乘积默认返回1 If m = 0 Then HSum = 1 Exit Function End If ' 终止条件2:剩余元素数量小于需要选的数量,无法完成组合,返回0 If n < m Then HSum = 0 Exit Function End If ' 递归分支:不选第n-1个元素的结果 + 选第n-1个元素的结果(数组索引从0开始) HSum = HSum(n - 1, m) + P(n - 1) * HSum(n - 1, m - 1) End Function
验证说明
测试场景k=8、s=2时,函数返回值约为1.4,与预期结果一致。如果需要更换因子数组,直接修改P = Array(...)部分即可;如果需要动态传入因子数组,可将P改为HSum函数的入参。
内容的提问来源于stack exchange,提问作者IkerGD
相关产品推荐
相关产品推荐

