vb扫雷,帮我看看递归哪错了

Public Function pan(ByVal i As Integer, ByVal j As Integer)
If i > 0 And i < 10 And j > 0 And j < 10 Then
If bug(i, j) > 0 And check(i, j) = 0 Then 'check代表雷区,bug代表雷数
Command((i - 1) * 9 + j).Caption = bug(i, j)
Else
Command((i - 1) * 9 + j).BackColor = vbWhite
Command((i - 1) * 9 + j).Enabled = False
Call pan(i - 1, j)
Call pan(i - 1, j + 1)
Call pan(i - 1, j - 1)
Call pan(i, j + 1)
Call pan(i, j - 1)
Call pan(i + 1, j + 1)
Call pan(i + 1, j - 1)
Call pan(i + 1, j)
End If
End If
End Function

1 个回答

vb的话好久没碰过了
简单看了一下,有些地方说的不是很清楚
不太理解
比如check方法的作用
妄加揣测,错误现象是不是有的时候好用
有的时候会遇到无线递归,就是进行不完递归
程序死掉

感觉当相邻的两个command均无雷,且周围均无雷的时候
也就是说,两个command的check和bug都是0的时候
会导致无限递归的情况出现
原因是commandA时由于bug是0所以调用递归去检查周围所有的command
包括commandB,
commandB又由于bug是0,所以调用递归去检查周围所有的command
包括commandA。
由此陷入无线递归的深渊

是否可以考虑利用command的enabled属性是否为false来判断该command是否已经检查过
如果是false代表已经检查过,可以直接跳出方法,结束递归,从而避免错误

这么长时间没人回答
我尝试回答一下
如果回答的不对,请谅解