递归的感悟

最简单的递归
求n阶乘的VB函数过程。
Private Function F( byval n As Integer ) As long
    If n=1 Then
        F=1
    Else:
        F=n*F(n-1)
    End If
End Function
让我们来跟踪这个程序的计算过程,令n=4调用这个函数,用下面的形式来表示递归求解的过程:
(1)F(4)=4×F(3)      'n=4调用函数过程F(3)
(2)F(3)=3×F(2)      'n=3调用函数过程F(2)
(3)F(2)=2×F(1)      'n=2调用函数过程F(1)
(4)F(1)=1             'n=1求得F(1)的值
(5)F(2)=2×1=2       '回归,n=2,求得F(2)的值
(6)F(3)=3×2=6       '回归,n=3,求得F(3)的值
(7)F(4)=4×6=24      '回归,n=4,求得F(4)的值
求第n个斐波那契数。
Private Function Fibo(ByVal n As Integer) As Integer
                    '函数的返回值为第n个斐波那契数
    If (n=0) Then
        Fibo=0
    ElseIf n=1 Then
        Fibo=1
    Else: Fibo=Fibo(n-1)+Fibo(n-2)
    End If
End Function

排列组合
Dim q, le, ss
Sub 排列组合()
On Error Resume Next
ss = ""
strA = "运行下看"
le = Len(strA)
    处理 strA, le
MsgBox ss
End Sub
Function 处理(strA, le)
    For i = 1 To Len(strA)
        a = Mid(strA, i, 1)
        sy = Left(strA, i - 1) & Right(strA, Len(strA) - i)
        q = q & a
     If Len(q) = le Then
     ss = ss & q & Chr(13)
     End If
        处理 sy, le
    Next
q = Left(q, Len(q) - 1)
End Function


  
  
方案二
Sub sdf()
    a = "中文论坛"
    l = Len(a)
    For i = 1 To 4
        For j = 1 To 4
Function F(n)
    If n = 1 Then
        F = 1
        Else:
        F = n * F(n - 1)
    End If
    
End Function
Function e(n)
    If n = 1 Then
        e = 1
    Else
        e = e(n - 1) + F(n)
    End If
End Function
Sub sdf()
    a = "中文论坛"
    l = Len(a)
    For i = 1 To 4
        For j = 1 To 4
            For k = 1 To 4
                For l = 1 To 4
                    If Mid(a, i, 1) <> Mid(a, j, 1) And Mid(a, i, 1) <> Mid(a, k, 1) And Mid(a, i, 1) <> Mid(a, l, 1) And Mid(a, j, 1) <> Mid(a, k, 1) _
                    And Mid(a, j, 1) <> Mid(a, l, 1) And Mid(a, k, 1) <> Mid(a, l, 1) Then
                    Debug.Print Mid(a, i, 1) & Mid(a, j, 1) & Mid(a, k, 1) & Mid(a, l, 1)
                    End If
                Next
            Next
        Next
    Next


End Sub


双重递归
Sub 计算阶乘和() '1!+2!+3!+…+n! ;使用双重递归完成
    Debug.Print e(5)
End Sub


word表格转为分数:
Dim s
Sub sdf()
s = ""
Dim ta As Table, ro As Row
Dim ta1 As Table
    Set ta = Me.Tables(1)
    处理 ta, s
    s = "eq " + Replace(s, Chr(13), "")
    ta.Delete
Selection.InsertAfter s
Application.Run "insertfieldchars"
Selection.Fields.Update
End Sub
Function 处理(ta As Table, s)
    For i = ta.Rows.Count To 1 Step -1
        If ta.Rows(i).Cells(1).Tables.Count > 0 Then
            For j = 1 To ta.Rows(i).Cells(1).Tables.Count
                处理内表 ta.Rows(i).Cells(1).Tables(1)
            Next
            i = i + 1
        Else
                m = Replace(ta.Rows(i).Cells(1).Range.Text, Chr(13) & Chr(7), "")
                If s = "" Then
                    s = m
                Else
                    s = "\f(" + m + "," + s + ")"
                End If
            End If
        Next
    End Function
Function 处理内表(ta As Table)
    处理 ta, s
    ta.Select
    ta.Delete
    Selection.TypeText s
    s = ""
End Function



回复的主题:




Excel 如何用递归将嵌套表中数字换成分数形式?-Word-ExcelHome技术论坛 -  http://club.excelhome.net/forum.php?mod=viewthread&tid=1177443







  
  



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhanglei1371

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值