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

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

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

相关文章

来自专栏hbbliyong

WPF Trigger for IsSelected in a DataTemplate for ListBox items

<DataTemplate DataType="{x:Type vm:HeaderSlugViewModel}"> <vw:HeaderSlug...

4214
来自专栏菩提树下的杨过

Flash/Flex学习笔记(23):运动学原理

先写一个公用的小球类Ball: package{ import flash.display.Sprite; //小球 类 public class B...

27110
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2955
来自专栏芋道源码1024

熔断器 Hystrix 源码解析 —— 断路器 HystrixCircuitBreaker

本文主要基于 Hystrix 1.5.X 版本 1. 概述 2. HystrixCircuitBreaker 3. HystrixCircuitBreaker....

5657
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2810
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2767
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.4K7
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

6866
来自专栏落花落雨不落叶

canvas画简单电路图

80911
来自专栏魂祭心

原 canvas绘制clock

4994

扫码关注云+社区