使用GoTo(递归)跳过代码

时间:2014-08-30 10:40:43

标签: vb.net recursion goto

我在执行时跳过代码的某些特定部分时遇到了问题。

Dim turn as Integer = 1

Function recurs1()

    If turn = 9 Then
        GoTo Endline
    End If

    For i = 0 To 5
        For j = 0 To 5
            If (arr(i, j) <> 10 And arr(i, j) <> 20) Then
                If chance Mod 2 = 1 Then
                    MsgBox("Intialized (" & i & "," & j & ") To 10")    'Line X
                    arr(i, j) = 10
                ElseIf chance Mod 2 = 0 Then
                    MsgBox("Intialized (" & i & "," & j & ") To 20")    'Line Y
                    arr(i, j) = 20
                End If
                turn += 1    'Updating turn
                recurs1()    'Recursion takes place here
            End If
        Next
    Next

Endline:

    Return Nothing

End Function

根据我的理解,代码应该在turn的值9之后停止为数组赋值,并且应该将流返回到调用函数/ sub。但是,它会继续分配值,并根据转弯值打印X行或Y行。

如果允许,则转弯值最多增加到37。

我肯定会感谢一些对我的代码有更深入了解的人的帮助。

非常感谢。

2 个答案:

答案 0 :(得分:1)

您已将递归调用放在两个for循环中。该函数将被递归调用,直到turn = 9,但是当它返回时它仍然在循环中,无论如何它都会被增加,而无需进一步检查。 如果你在调用递归函数之前检查了turn的值,那么它可能会更好(这样你也可以摆脱GoTo)。

答案 1 :(得分:0)

为什么不把Return Nothing放在哪里有Goto Endline?据我所知,返回会停止执行功能。这将摆脱可怕的Goto命令(它可能导致混乱的代码和不可思议的错误)。