VB题--阶乘

来源:百度知道 编辑:UC知道 时间:2024/06/19 00:46:12
Function n(a As Integer) As Long
If a = 1 Then
n = a
Else
n = a * n(a - 1)
End If
End Function

Private Sub Form_Activate()
Dim i As Integer
Dim t As Integer
i = InputBox("请输入一个数字", "阶乘")
t = n(i)
MsgBox i & "! = " & t, , "阶乘"
End Sub

能告诉我这个阶乘的原理吗???

用递归来做,效率非常低的。如果只算一个数的阶乘还看不出来,如果算像1!+2!+。。。+30!,就知道了,非常慢。

Function n(a As Integer) As Long
If a = 1 Then
n = a
Else
n = a * n(a - 1)
End If
End Function

看到没有,自己调用自己---用到了递归。
1!=1
2!=2*1!
3!=3*2!
4!=4*3!

n!=n*(n-1)!

如果你要求8!。
那么8!=8*7!(因为8!=1),而7!调用n(7)
这个函数,n(7)将重复8!的动作,一直到
3!=3*2!
2!=2*1!
1!=1
然后一步一步地退回去,就可以得到8!的解了。
我能说的就是这些,希望你能明白。

Function n(a As Integer) As Long
If a = 1 Then
n = a
Else
n = a * n(a - 1)
End If
End Function
嵌套调用Function n(a As Integer) As Long函数
比如输入是3则能n=3*n(2),n(2)=2*n(1),n(1)=1

这里使用的是递归调用。
简单地说,递归就是一个过程调用过程本身。
思路为:n! = n * (n-1)!

例如,当 i=5 时,求 n(5) 的值变为 5 * n(4)。而 n(4) 又可变为 4 * n(3) ......,n(2)又可变为 2 * n(1),这时 n(1) = 1 已知,递归调用停止,其执行结果为 5 * 4 * 3 * 2 * 1,即 5! 。

求阶乘还可以用For计数循环,通用过程:

Function Factorial(n As Integer) As Long
On Error