vb函数过程的一个问题

来源:百度知道 编辑:UC知道 时间:2024/05/27 15:37:46
大家请看下面一个函数
Private Function fac(ByVal n As Integer) As Long
If n = 1 Then
fac = 1
ElseIf n > 1 Then
fac = n * fac(n - 1)
End If
End Function
再应用
Private Sub Command1_Click()
Dim m, n, result
m = Val(InputBox("请输入m:"))
n = Val(InputBox("请输入n:"))
If m >= 1 And n >= 1 Then
result = fac(m) / (fac(n) * fac(m - n))
Print "C" & n & "_" & m & "=" & result
MsgBox "C" & n & "_" & m & "=" & result
End If
End Sub

我想问的是fac = n * fac(n - 1)这一步,为什么没有做循环,电脑会自动算出来?
如果我的n是9,而fac(n-1)这一步未知,而又是n*fac(n-1)赋值给fac的我又如何得出fac的值呢?
我想要详细一点的回答,是因为它自己调用自己吗?怎么调用的?如fac(9)他会调用到fac=9*fac(8),然后发现fac(8)算不出来,再去算fac(7),直到fac(1)?
那这个函数岂不是跟循环体一样了?

这是迭代,fac(n-1)这一步未知,所有计算机会把计算中间结果入栈,fac(n-1),最后一直算到fac(1),然后把结果一步一步返回,最后就算出了fac(n)

因为fac自己调用了自己啊,所以能算