天天看點

在遞歸函數中因不正确使用公共變量而形成死循環

昨天碰到了挺郁悶的錯誤,我寫的一個遞歸函數,形成了死循環。代碼如下:

 1

在遞歸函數中因不正确使用公共變量而形成死循環

 2

在遞歸函數中因不正确使用公共變量而形成死循環

'遞歸删除頻道,參數:頻道ID

 3

在遞歸函數中因不正确使用公共變量而形成死循環

Sub DeleteBoard(bid)

 4

在遞歸函數中因不正确使用公共變量而形成死循環

    '删除該頻道所有新聞

 5

在遞歸函數中因不正确使用公共變量而形成死循環

    News.DeleteByCondition "BoardID=" & bid

 6

在遞歸函數中因不正确使用公共變量而形成死循環

    '删除該頻道所有子頻道

 7

在遞歸函數中因不正确使用公共變量而形成死循環

    Dim bs

 8

在遞歸函數中因不正确使用公共變量而形成死循環

    bs = Board.GetList("FartherID=" & bid, false, -1, -1)

 9

在遞歸函數中因不正确使用公共變量而形成死循環

    If IsArray(bs) Then

10

在遞歸函數中因不正确使用公共變量而形成死循環

        For i=LBound(bs) To UBound(bs)

11

在遞歸函數中因不正确使用公共變量而形成死循環

            DeleteBoard bs(i).ID

12

在遞歸函數中因不正确使用公共變量而形成死循環

        Next

13

在遞歸函數中因不正确使用公共變量而形成死循環

    End If

14

在遞歸函數中因不正确使用公共變量而形成死循環

    '删除該頻道

15

在遞歸函數中因不正确使用公共變量而形成死循環

    Board.Delete bid

16

在遞歸函數中因不正确使用公共變量而形成死循環

End Sub

17

在遞歸函數中因不正确使用公共變量而形成死循環

後來檢查才發現,罪魁禍首就是那個i,它是一個全局變量。遞歸的時候,在另一次調用的時候,會修改它的值……因而,就莫明其妙的形成了死循環。修改後代碼如下:

在遞歸函數中因不正确使用公共變量而形成死循環
在遞歸函數中因不正确使用公共變量而形成死循環
在遞歸函數中因不正确使用公共變量而形成死循環
在遞歸函數中因不正确使用公共變量而形成死循環
在遞歸函數中因不正确使用公共變量而形成死循環
在遞歸函數中因不正确使用公共變量而形成死循環
在遞歸函數中因不正确使用公共變量而形成死循環

    Dim bs, i

在遞歸函數中因不正确使用公共變量而形成死循環
在遞歸函數中因不正确使用公共變量而形成死循環
在遞歸函數中因不正确使用公共變量而形成死循環
在遞歸函數中因不正确使用公共變量而形成死循環
在遞歸函數中因不正确使用公共變量而形成死循環
在遞歸函數中因不正确使用公共變量而形成死循環
在遞歸函數中因不正确使用公共變量而形成死循環
在遞歸函數中因不正确使用公共變量而形成死循環
在遞歸函數中因不正确使用公共變量而形成死循環
在遞歸函數中因不正确使用公共變量而形成死循環

增加了i的内部聲明,這樣,就會使用内部的i,而不是全局的那個。

我不相信神話,我隻相信汗水!我不相信命運,我隻相信雙手!

繼續閱讀