2014-08-30 85 views
1

我有問題跳過執行時代碼的某個特定部分。使用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

值我會欣賞一些幫助,從別人的代碼比我更深入的瞭解這個問題。

非常感謝。

+0

爲什麼使用SQL註釋語法? – 2014-08-30 10:44:36

+0

錯誤,只是爲了讓它更明顯,它是一個評論。不過,我只把它放在這裏。不在父代碼中。 – Jackdaw 2014-08-30 10:47:48

+1

我討厭'Go To',並且你的代碼不會停在'turn = 9'處。只有在調用函數'recurs1()' – bansi 2014-08-30 10:48:01

回答

1

您已將遞歸調用放在兩個for循環中。該函數將被遞歸地調用,直到turn = 9,但是當它返回時,它仍然在循環中,無論如何將不會進一步檢查。 如果你在調用遞歸函數之前檢查了轉向的值,它可能會更好(這樣你也可以擺脫GoTo)。

+0

完美,謝謝。 – Jackdaw 2014-08-30 11:03:30

0

爲什麼不只是把你沒有Goto Endline的地方返回?就我所知,返回函數會停止函數執行。這將擺脫可怕的Goto命令(它會導致混亂的代碼和不可思議的錯誤)。

+0

我認爲除非沒有其他選擇,否則不會使用GoTos來分解事物。擺脫它,謝謝。 – Jackdaw 2014-09-01 09:23:25