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

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

'递归删除频道,参数:频道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 条评论
登录 后参与评论

相关文章

来自专栏IT可乐

Java IO详解(二)------流的分类

一、根据流向分为输入流和输出流:   注意输入流和输出流是相对于程序而言的。   输出:把程序(内存)中的内容输出到磁盘、光盘等存储设备中 ?      输入:...

1857
来自专栏企鹅号快讯

8行代码实现ui文件到py文件转换

在用PyQt进行GUI编程时,一般先通过Qt Designer产生后缀为.ui的UI文件(类似于XML文件),接着将.ui文件转换成.py文件,再通过一个pyt...

2698
来自专栏Python自动化测试

测试驱动之csv文件在自动化中的使用(十)

python提供了对csv文件处理的模块,直接import csv就可以了,那么神秘是csv文件了?csv文件全名称为Comma-Separated Valu...

634
来自专栏Pythonista

python模块和包

一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py 的后缀。

621
来自专栏java 成神之路

JSP 热部署 源码解析

2663
来自专栏青玉伏案

设计模式(十一):从文Finder中认识"组合模式"(Composite Pattern)

上一篇博客中我们从从电影院中认识了"迭代器模式"(Iterator Pattern),今天我们就从文件系统中来认识一下“组合模式”(Composite Patt...

18010
来自专栏全华班

java学习手册-java 新手入门必看的30个题

一、基础篇 1 什么是Java、Java2、JDK?JDK后面的1.3、1.4.2版本号又是怎么回事? 答:Java是一种通用的,并发的,强类型的,面向对象的...

3835
来自专栏PPV课数据科学社区

将Python和R整合进一个数据分析流程

在Python中调用R或在R中调用Python,为什么是“和”而不是“或”? 在互联网中,关于“R Python”的文章,排名前十的搜索结果中只有2篇讨论了一起...

3738
来自专栏简书专栏

基于Pyecharts的词云图实战

标题中的英文首字母大写比较规范,但在python实际使用中均为小写。 本文的写作内容是将25000条评论当中的热词提取出来,并制作词云图 开发环境是jupy...

1723
来自专栏Script Boy (CN-SIMO)

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1

场景:eclipse中编写java中用到数组 问题:       程序不报错但是运行过程中 终止,显示字样 “ Exception in thread "...

1830

扫码关注云+社区