在递归函数中因不正确使用公共变量而形成死循环

昨天碰到了挺郁闷的错误,我写的一个递归函数,形成了死循环。代码如下:

'递归删除频道,参数:频道ID
Sub DeleteBoard(bid)
    '删除该频道所有新闻
    News.DeleteByCondition "BoardID=" & bid
    '删除该频道所有子频道
    Dim bs
    bs = Board.GetList("FartherID=" & bid, false, -, -)
    If IsArray(bs) Then
        For i=LBound(bs) To UBound(bs)
            DeleteBoard bs(i).ID
        Next
    End If
    '删除该频道
    Board.Delete bid
End Sub

后来检查才发现,罪魁祸首就是那个i,它是一个全局变量。递归的时候,在另一次调用的时候,会修改它的值……因而,就莫明其妙的形成了死循环。修改后代码如下:

'递归删除频道,参数:频道ID
Sub DeleteBoard(bid)
    '删除该频道所有新闻
    News.DeleteByCondition "BoardID=" & bid
    '删除该频道所有子频道
    Dim bs, i
    bs = Board.GetList("FartherID=" & bid, false, -, -)
    If IsArray(bs) Then
        For i=LBound(bs) To UBound(bs)
            DeleteBoard bs(i).ID
        Next
    End If
    '删除该频道
    Board.Delete bid
End Sub

增加了i的内部声明,这样,就会使用内部的i,而不是全局的那个。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云端漫步

go设计模式之抽象工厂

在上一篇文章中,通过手机的例子对工厂方法进行了展开。制造商不单单只生产手机这一种产品,同时也生产pc,如果工厂扩展其它业务,工厂方法模式就不适用了。为了实现工厂...

1180
来自专栏小樱的经验随笔

UVA 1030 - Image Is Everything【模拟+思维+迭代更新】

题目链接:uva 1030 - Image Is Everything 题目大意:有一个最大为n*n*n的立方体的一个不规整立体,由若干个1*1*1的小正方体构...

2745
来自专栏Jerry的SAP技术分享

一个查看UI5控件所有公有方法的小技巧

一个很小的tip:比如我想把UI5表格控件里的每列设置成宽度根据显示的内容自适应,需要知道应该调用控件的哪个方法来实现。

2009
来自专栏小樱的经验随笔

Vijos P1113 不高兴的津津【模拟】

不高兴的津津 描述 津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢...

2608
来自专栏令仔很忙

设计模式六大原则---依赖倒置原则(DIP)

    依赖倒置原则告诉我们:细节是多变的,而抽象是相对稳定的。所以我们编程的时候要注重抽象的编程,而非细节编程。

1102
来自专栏web前端教室

为什么你的代码看起来像“野路子”出来的?

这段时间看0827零基础班同学们的作业,html、css、js的基本的语法、用法已经都能掌握。现在阶段主要的问题是,

1033
来自专栏数据小魔方

教你如何优雅的用R语言调用有道翻译

最近刚发现了个有趣的包,一个R语言发烧友开发了R语言与有道在线翻译的接口,可能这位大神也是一个受够了每天打开网页狂敲键盘查词的罪,索性自己动手,从此丰衣足食。 ...

2273
来自专栏GreenLeaves

FactoryMethod工厂方法模式(创建型模式)

整个抽象的游戏设施建造系统相对变化较慢,本例中只有一个Build的创建方法,而Build内部的方法实现,该实现依赖与各种具体的实现,而这些实现变化的非常频繁,现...

722
来自专栏编程一生

架构师之路--从原理角度来分析性能

  埃及艳后Cleopatra,很小的时候看过妈妈买的一本书里把她的名字翻译成克娄巴特拉,里面有很多描写她美貌的场景描写。然而这个以美貌著称的奇女子,我看到书里...

832
来自专栏闻道于事

使用ichartjs生成图表

官网:http://www.ichartjs.com/   ichartjs 是一款基于HTML5的图形库。使用纯javascript语言, 利用HTML5的c...

5307

扫码关注云+社区