Function 在递归函数中声明新变量

Function 在递归函数中声明新变量,function,recursion,vbscript,Function,Recursion,Vbscript,我试图用VBScript实现Strassen的矩阵乘法算法。但是我在递归方面有很多问题 在以下递归算法中: Function multiply(matrixA, matrixB) Dim n n = UBound(matrixA) + 1 ReDim R(n - 1, n - 1) If (n = 1) Then R(0,0) = matrixA(0,0) * matrixB(0,0) Else ReDim A11(n/2

我试图用VBScript实现Strassen的矩阵乘法算法。但是我在递归方面有很多问题

在以下递归算法中:

Function multiply(matrixA, matrixB)
    Dim n
    n = UBound(matrixA) + 1
    ReDim R(n - 1, n - 1)

    If (n = 1) Then
        R(0,0) = matrixA(0,0) * matrixB(0,0)
    Else
        ReDim A11(n/2 - 1, n/2 - 1)
        ReDim A12(n/2 - 1, n/2 - 1)
        ReDim A21(n/2 - 1, n/2 - 1)
        ReDim A22(n/2 - 1, n/2 - 1)
        ReDim B11(n/2 - 1, n/2 - 1)
        ReDim B12(n/2 - 1, n/2 - 1)
        ReDim B21(n/2 - 1, n/2 - 1)
        ReDim B22(n/2 - 1, n/2 - 1)

        Call PartitionMatrix(matrixA, A11, 0, 0)
        Call PartitionMatrix(matrixA, A11, 0, n/2 - 1)
        Call PartitionMatrix(matrixA, A21, n/2 - 1, 0)
        Call PartitionMatrix(matrixA, A22, n/2 - 1, n/2 - 1)
        Call PartitionMatrix(matrixB, B11, 0, 0)
        Call PartitionMatrix(matrixB, B12, 0, n/2 - 1)
        Call PartitionMatrix(matrixB, B21, n/2 - 1, 0)
        Call PartitionMatrix(matrixB, B22, n/2 - 1, n/2 - 1)

        Dim M1, M2, M3, M4, M5, M6, M7
        M1 = multiply(AddMatrix(A11, A22), AddMatrix(B11, B22))
        M2 = multiply(AddMatrix(A21, A22), B11)
        M3 = multiply(A11, SubMatrix(B12, B22))
        M4 = multiply(A22, SubMatrix(B21, B11))
        M5 = multiply(AddMatrix(A11, A12), B22)
        M6 = multiply(SubMatrix(A21, A11), AddMatrix(B11, B12))
        M7 = multiply(SubMatrix(A12, A22), AddMatrix(B21, B22))
        Wscript.Echo UBound(R) 'Returns only 0's in console

        Dim C11, C12, C21, C22
        C11 = AddMatrix(SubMatrix(AddMatrix(M1, M4), M5), M7)
        C12 = AddMatrix(M3, M5)
        C21 = AddMatrix(M2, M4)
        C22 = AddMatrix(SubMatrix(AddMatrix(M1, M3), M2), M6)

        Call JoinMatrix(C11, R, 0 , 0)
        Call JoinMatrix(C12, R, 0 , n/2 - 1)
        Call JoinMatrix(C21, R, n/2 - 1, 0)
        Call JoinMatrix(C22, R, n/2 - 1, n/2 - 1)
    End If
    multiply = R
End Function

我将
multiply
函数的返回值赋给变量M1、M2等。然而,我在
multiply
中返回的变量
R
似乎是从递归函数中继承过来的-就像在中一样,它没有声明一个新的矩阵
R
。理论上,如果
R
每次在函数中声明一个新的内存位置时,它都会得到一个新的内存位置,那么它根本不会受到对乘法函数的递归调用的影响(我在这里回显
UBound(R)
),但它确实受到了影响。如何确保每次在递归中调用函数时,
R
实际上都会得到一个新的声明?

R
它没有在任何地方显式标注,因此它隐式标注在函数之外,而您只需在函数中重新标注它

Dim R()
直接插入到
ReDim R(n-1,n-1)
的上方,以在函数中显式地对其进行尺寸标注,它应该可以按预期工作