所谓的递归,讲得简单一点就是一个函数在其代码中反复调用自身。
以下为几种VBA递归的函数代码,希望对您有所帮助。
一、普通级的VBA递归函数代码
①累加循环
Function sum2_2(m) As Long '1+2+3+……+10 '也可以自定义从 任何数 n - n+m 之间
For i = 1 To m
sum2_2 = sum2_2 + i
Next
End Function
Function sum2(m) As String '1+2+3+……+10 '也可以自定义从 任何数 n - n+m 之间
If m = 1 Then sum2 = 1 Else sum2 = m + sum2(m - 1)
End Function
②阶乘递归 '1*2*3*……*10 '也可以自定义从 任何数 n - n+m 之间
Function jc(m) As String
If m = 1 Then jc = 1 Else jc = m * jc(m - 1)
End Function
'1*2*3*……*10 '也可以自定义从 任何数 n - n+m 之间
Function jc_2(m) As Long
For i = 1 To m
If i = 1 Then
jc_2 = 1
Else
jc_2 = jc_2 * i
End If
Next
End Function
③组合递归
Function COMBIN2(m, n) As String
If n = 1 Then COMBIN2 = m Else COMBIN2 = COMBIN2(m - 1, n - 1) * m / n
End Function
Function COMBIN2_2(m, n) As String
Dim i As Long, x As String, y As String, z As String
x = 1
For i = 1 To m
x = x * i
Next i
y = 1
For i = 1 To n
y = y * i
Next i
z = 1
For i = 1 To m - n '从这里可以看出 m > n 为好
z = z * i
Next i
COMBIN2_2 = x / (y * z)
End Function
二、著名的递归函数代码
①菲波纳契数列循环
'我们求 从 第一步 1, 第二步 2 第三步(1+2=3)…… 到 20 步 后 得到是什么呢 ?
Function FBNQ_2(m&, n&, k&) As String
Dim i As Long
For i = 1 To k - 2
If i = 1 Then
m = m + n
ElseIf i = 2 Then
n = m + n
Else
FBNQ_2 = m + n
m = n '迭代
n = FBNQ_2 '迭代
End If
Next
End Function
②菲波纳契数列递归
Function FBNQ(m&, n&, k&) As String
FBNQ = m + n
m = n '迭代
n = FBNQ '迭代
If k < 4 Then Exit Function
FBNQ = FBNQ(m&, n&, k - 1)
End Function