Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2235|回复: 1

百度7道递归小题

[复制链接]
发表于 2013-8-30 23:27 | 显示全部楼层 |阅读模式
本帖最后由 爱疯 于 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程序开发』 开新帖,或在链接帖讨论。

评分

参与人数 1 +3 收起 理由
木牙水 + 3 很给力!

查看全部评分

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-8-31 08:43 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-3 22:32 , Processed in 0.342459 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表