编写了以下程序计算5!+4!+3!+2!+1!
Private Sub Form_Click()
Dim sum As Integer, i As Integer
For i = 5 To 1 Step -1
sum = sum + Multiply(i)
Next
Print "sum="; sum
End Sub
Private Function Multiply(n As Integer) As Integer
Multiply = 1
Do While n > 0
Multiply = Multiply * n
n = n - 1
Loop
End Function
可是运行结果却是120,即只计算了5!,是不是因为在第一次调用Multiply函数后n的值为0,由于实参与形参共享地址单元,实参i的值也是0,所以再次调用函数时,就不符合Do While n>0这个条件,所以就退出循环呢?
如果我想把实参i变为表达式,因为表达式是按值传递的。那应该怎么改呢?
谢谢!
參考答案:正如你所将,FOR只执行了一次后I就等于0了,所以就终止循环了。
解决方法:再引用一个变量:a=i
然后sum = sum + Multiply(a) 就可以解决你的问题了
或者在函数中修改一处,不让共享地址单元的数字在函数中参与运算,引用第二个变量:
Private Function Multiply(n As Integer) As Integer
js=n
Multiply = 1
Do While js > 0
Multiply = Multiply * js
js = js - 1
Loop
End Function