vb 堆栈空间溢出问题

来源:百度知道 编辑:UC知道 时间:2024/05/25 11:22:24
编了个程序,调试时显示堆栈空间溢出,请高手看看,错在哪里?
是一个求组合数的程序:
Private Sub Command1_Click()
Dim m&, s&, s1&, s2&, s3&, k1&, k2&, x&, y&
Cls
s1 = 1
s2 = func(k2)
s3 = 1
k1 = Val(Text1)
k2 = Val(Text2)
Text3 = s
For m = 1 To k1
s1 = s1 * m
Next m
If k1 > k2 Then
y = k1 - k2
For x = y To 1 Step -1
s3 = s3 * x
Next x
Else
InputBox ("M<N,无法计算,请重新输入")
Text1 = ""
Text2 = ""
End If
s = s1 / (s2 * s3)
End Sub

Public Function func(ByVal n As Integer) As String

If n = 1 Then
func = 1
Else
func = n * func(n - 1)
End If
End Function
对于这个问题,n=0 时,进入死循环,多次递归导致堆栈空间溢出,该如何修改程序?

Public Function func(ByVal n As Integer) As String
if n<0 then exit function
If n = 1 or n=0 Then
func = 1
Else
func = n * func(n - 1)
End If
End Function

n=0 时,进入死循环,多次递归导致堆栈空间溢出