|
本帖最后由 爱疯 于 2014-11-13 10:41 编辑
递归_百度百科
http://baike.baidu.com/view/96473.htm
特别感谢 香川群子 老师和各位高手的帮助!
用递归的方法完成下列问题
1.求数组中的最大数
2.1+2+3+...+n
3.求n个整数的积
4.求n个整数的平均值
5.求n个自然数的最大公约数与最小公倍数
6.有一对雌雄兔,每两个月就繁殖雌雄各一对兔子.问n个月后共有多少对兔子
7.已知:数列1,1,2,4,7,13,24,44,...求数列的第 n项.
'**************************************************************************************
'答1:http://www.excelpx.com/thread-308379-2-1.html
Sub test1()
Dim arr()
arr = Array(8, 4, 7, 11)
MsgBox MaxInArray(arr, UBound(arr))
End Sub
'
Function MaxInArray(arr, x)
If x = 0 Then
'递归到首项时终止结束。
MaxInArray = arr(0)
Else
'第x项和第0项(首项)作比较,把最大值交换放入首项arr(0)
If arr(x) > arr(0) Then arr(0) = arr(x)
'然后递归进入下一项。x-1起到了向下一项推进的作用,最后到首项时终止结束。
MaxInArray = MaxInArray(arr, x - 1)
End If
End Function
'**************************************************************************************
'答2
Sub test2()
MsgBox f(4)
End Sub
'
Function f(ByVal n As Integer) As Long
If n = 1 Then
f = 1
Else
f = n + f(n - 1)
End If
End Function
'**************************************************************************************
'答3:将答2中F = n + F(n - 1),改为F = n * F(n - 1)
'**************************************************************************************
'答4:将答2中F(4),改为F(4)/4
'**************************************************************************************
' http://www.excelpx.com/home/show.aspx?id=34901&cid=15
Sub test5()
Dim a, b
a = 12: b = 30
MsgBox gcd(a, b)
MsgBox dz(a, b, 1)
MsgBox a * b / gcd(a, b) '最小公倍数
End Sub
'
' http://www.excelpx.com/thread-308523-1-1.html
'求最大公约数(辗转相除法)
Function gcd(ByVal a As Integer, ByVal b As Integer) As Long
If a Mod b Then
gcd = gcd(b, a Mod b)
Else
gcd = b
End If
End Function
'
'求最大公约数(更相减损法,也叫等值算法)
Function dz&(ByVal a, ByVal b, c)
If a = b Then
dz = b * c
Exit Function
Else
If a Mod 2 <> 0 Or b Mod 2 <> 0 Then
'不都是偶数
If a < b Then swap a, b
If a < a - b Then swap a, a - b
dz = dz(b, a - b, c)
Else
'都是偶数,用2约简
a = a / 2
b = b / 2
c = c * 2
dz = dz(a, b, c)
End If
End If
End Function
'
'a,b互换
Sub swap(a, b)
Dim t&
t = a: a = b: b = t
End Sub
'**************************************************************************************
'答6:http://www.excelpx.com/thread-308575-1-1.html
Sub test6()
MsgBox tz(9)
End Sub
'
Function tz(x)
If x < 3 Then
tz = 1
Else
If x Mod 2 Then
tz = tz(x - 1) + tz(x - 2) '奇数
Else
tz = tz(x - 1) '偶数
End If
End If
End Function
'**************************************************************************************
'答7:http://www.excelpx.com/thread-308465-1-1.html
Sub test7()
MsgBox sl(5)
End Sub
'
Function sl(ByVal n As Integer)
Select Case n
Case 1
sl = 1
Case 2
sl = 1
Case 3
sl = 2
Case Else
sl = sl(n - 3) + sl(n - 2) + sl(n - 1)
End Select
End Function
说明:
1)本帖只为汇总。
2)每题的答案只是以个人理解、记忆和习惯选的,建议参考链接帖中老师和高手们的方法。
3)由于自己是刚学的,很多问题答不上来。如有疑问,建议到 『Excel VBA程序开发』 开新帖,或在链接帖讨论。
|
评分
-
查看全部评分
|