|
楼主 |
发表于 2011-10-23 21:45
|
显示全部楼层
本帖最后由 香川群子 于 2011-10-23 21:49 编辑
逆向的继续,到了最后的递归过程【calc4】,即4个元素的加、减、乘、除递归计算过程。
Sub calc4(a(), t1, t2, t3, t4)
……
End Sub
递归子过程命名为【calc4】,即四个元素的计算。
参数1为数组a()含四个计算对象元素,以及文字结果t1、t2、t3、t4。
思考计算最终结果的出口,就是递归过程【calc3】需要的入口,即三个元素的计算结果。
入口呢?那么就是四个元素a(),以及它们的文字表达式,t1,t2,t3,t4
而处理过程,也很简单,仍然是【加、减、乘、除】
但也需要包含全部4个元素的所有排列方式。
具体代码如下:
(同样是:代码很【复杂=行数很多】,但是理解很容易,很简单)
- Sub calc4(a(), t1, t2, t3, t4)
- b(1) = a(1) + a(2)
- b(2) = a(3)
- b(3) = a(4)
- calc3 b, "(" & t1 & "+" & t2 & ")", t3, t4
-
- b(1) = a(1) + a(3)
- b(2) = a(2)
- b(3) = a(4)
- calc3 b, "(" & t1 & "+" & t3 & ")", t2, t4
-
- b(1) = a(1) + a(4)
- b(2) = a(2)
- b(3) = a(3)
- calc3 b, "(" & t1 & "+" & t4 & ")", t2, t3
-
- b(1) = a(2) + a(3)
- b(2) = a(1)
- b(3) = a(4)
- calc3 b, "(" & t2 & "+" & t3 & ")", t1, t4
-
- b(1) = a(2) + a(4)
- b(2) = a(1)
- b(3) = a(3)
- calc3 b, "(" & t2 & "+" & t4 & ")", t1, t3
-
- b(1) = a(3) + a(4)
- b(2) = a(1)
- b(3) = a(2)
- calc3 b, "(" & t3 & "+" & t4 & ")", t1, t2
- '以上各种加法计算
-
- If a(1) >= a(2) Then
- b(1) = a(1) - a(2)
- b(2) = a(3)
- b(3) = a(4)
- calc3 b, "(" & t1 & "-" & t2 & ")", t3, t4
- End If
- If a(2) > a(1) Then
- b(1) = a(2) - a(1)
- b(2) = a(3)
- b(3) = a(4)
- calc3 b, "(" & t2 & "-" & t1 & ")", t3, t4
- End If
-
- If a(1) >= a(3) Then
- b(1) = a(1) - a(3)
- b(2) = a(2)
- b(3) = a(4)
- calc3 b, "(" & t1 & "-" & t3 & ")", t2, t4
- End If
- If a(3) > a(1) Then
- b(1) = a(3) - a(1)
- b(2) = a(2)
- b(3) = a(4)
- calc3 b, "(" & t3 & "-" & t1 & ")", t2, t4
- End If
-
- If a(1) >= a(4) Then
- b(1) = a(1) - a(4)
- b(2) = a(2)
- b(3) = a(3)
- calc3 b, "(" & t1 & "-" & t4 & ")", t2, t3
- End If
- If a(4) > a(1) Then
- b(1) = a(4) - a(1)
- b(2) = a(2)
- b(3) = a(3)
- calc3 b, "(" & t4 & "-" & t1 & ")", t2, t3
- End If
-
- If a(2) >= a(3) Then
- b(1) = a(2) - a(3)
- b(2) = a(1)
- b(3) = a(4)
- calc3 b, "(" & t2 & "-" & t3 & ")", t1, t4
- End If
- If a(3) > a(2) Then
- b(1) = a(3) - a(2)
- b(2) = a(1)
- b(3) = a(4)
- calc3 b, "(" & t3 & "-" & t2 & ")", t1, t4
- End If
-
- If a(2) >= a(4) Then
- b(1) = a(2) - a(4)
- b(2) = a(1)
- b(3) = a(3)
- calc3 b, "(" & t2 & "-" & t4 & ")", t1, t3
- End If
- If a(4) > a(2) Then
- b(1) = a(4) - a(2)
- b(2) = a(1)
- b(3) = a(3)
- calc3 b, "(" & t4 & "-" & t2 & ")", t1, t3
- End If
-
- If a(3) >= a(4) Then
- b(1) = a(3) - a(4)
- b(2) = a(1)
- b(3) = a(2)
- calc3 b, "(" & t3 & "-" & t4 & ")", t1, t2
- End If
- If a(4) > a(3) Then
- b(1) = a(4) - a(3)
- b(2) = a(1)
- b(3) = a(2)
- calc3 b, "(" & t4 & "-" & t3 & ")", t1, t2
- End If
- '以上各种减法计算
-
- b(1) = a(1) * a(2)
- b(2) = a(3)
- b(3) = a(4)
- calc3 b, "(" & t1 & "*" & t2 & ")", t3, t4
-
- b(1) = a(1) * a(3)
- b(2) = a(2)
- b(3) = a(4)
- calc3 b, "(" & t1 & "*" & t3 & ")", t2, t4
-
- b(1) = a(1) * a(4)
- b(2) = a(2)
- b(3) = a(3)
- calc3 b, "(" & t1 & "*" & t4 & ")", t2, t3
-
- b(1) = a(2) * a(3)
- b(2) = a(1)
- b(3) = a(4)
- calc3 b, "(" & t2 & "*" & t3 & ")", t1, t4
-
- b(1) = a(2) * a(4)
- b(2) = a(1)
- b(3) = a(3)
- calc3 b, "(" & t2 & "*" & t4 & ")", t1, t3
-
- b(1) = a(3) * a(4)
- b(2) = a(1)
- b(3) = a(2)
- calc3 b, "(" & t3 & "*" & t4 & ")", t1, t2
- '以上各种乘法计算
-
- b(1) = a(1) / a(2)
- b(2) = a(3)
- b(3) = a(4)
- calc3 b, "(" & t1 & "/" & t2 & ")", t3, t4
-
- b(1) = a(2) / a(1)
- b(2) = a(3)
- b(3) = a(4)
- calc3 b, "(" & t2 & "/" & t1 & ")", t3, t4
-
- b(1) = a(1) / a(3)
- b(2) = a(2)
- b(3) = a(4)
- calc3 b, "(" & t1 & "/" & t3 & ")", t2, t4
-
- b(1) = a(3) / a(1)
- b(2) = a(2)
- b(3) = a(4)
- calc3 b, "(" & t3 & "/" & t1 & ")", t2, t4
-
- b(1) = a(1) / a(4)
- b(2) = a(2)
- b(3) = a(3)
- calc3 b, "(" & t1 & "/" & t4 & ")", t2, t3
-
- b(1) = a(4) / a(1)
- b(2) = a(2)
- b(3) = a(3)
- calc3 b, "(" & t4 & "/" & t1 & ")", t2, t3
-
- b(1) = a(2) / a(3)
- b(2) = a(1)
- b(3) = a(4)
- calc3 b, "(" & t2 & "/" & t3 & ")", t1, t4
-
- b(1) = a(3) / a(2)
- b(2) = a(1)
- b(3) = a(4)
- calc3 b, "(" & t3 & "/" & t2 & ")", t1, t4
-
- b(1) = a(2) / a(4)
- b(2) = a(1)
- b(3) = a(3)
- calc3 b, "(" & t2 & "/" & t4 & ")", t1, t3
-
- b(1) = a(4) / a(2)
- b(2) = a(1)
- b(3) = a(3)
- calc3 b, "(" & t4 & "/" & t2 & ")", t1, t3
-
- b(1) = a(3) / a(4)
- b(2) = a(1)
- b(3) = a(2)
- calc3 b, "(" & t3 & "/" & t4 & ")", t1, t2
-
- b(1) = a(4) / a(3)
- b(2) = a(1)
- b(3) = a(2)
- calc3 b, "(" & t4 & "/" & t3 & ")", t1, t2
- '以上各种除法计算
-
- End Sub
复制代码 呵呵,代码真的很【复杂】,但同时其含义和作用,又是简单到不能再简单。
最后强调,【calc4】递归过程的【出口】,就是调用【calc3】过程代码。
而接下来,【calc3】过程,将会调用【calc2】过程,直至得到最终结果。
呵呵。
所以,本例的递归计算24方法,是一种【多过程间接递归方式】。
过程总代码 →【calc4】递归→→【calc3】递归→【calc2】递归
每个【calc】递归计算过程,都会把复杂度降低一级,直至最终结果。
|
|