VBA阶乘代码返回数值平方而非阶乘 请教代码错误位置
VBA阶乘代码错误定位
错误原因说明
- 循环逻辑完全偏离阶乘的累计计算要求:循环内写的是
fact = i * x,每次进入循环都会把fact重新赋值为「当前i值 * 固定输入值x」,根本不会留存之前的计算结果做乘积累计 - 循环走到最后一轮时,循环变量i的值恰好和输入值x相等,此时计算出的
i * x就是x * x,也就是任意输入值的平方,这就是结果和阶乘预期完全不符的直接原因 - 存在一个容易踩的隐藏坑:VBA中数值型变量的默认初始值为0,代码没有给fact变量手动赋初始值,就算把循环的累计逻辑改对,从0开始乘所有数,最终结果也会全是0
修正方案
- 循环开始前给fact赋值1,作为乘积计算的起点
- 把循环内的赋值语句改为累计计算:每次用上一步的乘积结果乘当前循环的i值
修正后的完整可运行代码:
Sub factorial() Dim x As Long, i As Integer, fact As Long x = InputBox("enter the integer") fact = 1 For i = 1 To x fact = fact * i Next i MsgBox fact End Sub
补充提示:如果要严格匹配数学上的阶乘定义,可以在x赋值完成后增加判断逻辑,拦截小于0的无效输入(负数不存在阶乘定义)。
内容的提问来源于stack exchange,提问作者ARPAN BASU
相关产品推荐
相关产品推荐

