递归算法

今天为了解决treeview数据绑定的问题。不得不又把递归算法拿来复习啦一下。想来已经有好几年没有碰这个东东咯:)还是在大学学数据结构的时候学的。当时觉得这个东东没有什么用。不过现在看来用处蛮大的,真的是书到用时放很少啊!!!

首先建立一个数据库

id    text    sjid  

1       a        0  

2       b        1  

3       c        1  

4       d        2  

5       e        2  

6        f        3  

7       g        3  

8       h        2



id:主键 text:节点主题 sjid:上级节点id

递归的算法精髓就是,函数在方法体内自己调用自己。它特别适合用来遍历树结构。我们先查询出数据中本节点的所有子节点,然后遍历这些子节点。遍历时实施递归调用,再查询子节点的子节点。直到末级没有子节点后,逐级返回。

其实这个用图比较好表示,不过这里没有图,只有口述咯:)

代码如下:

void recursion(int sjid)

        {

            //每次递归都要实例化一个集合,这里我们用的是dataset

            DataSet1.recursionDataTable ds = new DataSet1.recursionDataTable();

            ds = ta.Getsjid(sjid);//查询出下级节点

            if (ds.Count != 0)//判断是否有下级节点,没有就跳过,不再递归。

            {

                foreach (DataSet1.recursionRow row in ds.Rows)//有就遍历下级节点

                {

                    //打印下级节点信息

                    Console.Write(row.id+"   ");

                    Console.Write(row.text+"  ");

                    Console.WriteLine(row.sjid);

                    recursion(row.id);//递归调用,将下级节点id作为参数传过去,继续查找它的子节点

                    //每次递归都会等待下级节点查询完毕返回,在继续遍历下一个同级级节点

                    //也就是说它会等递归到末级节点后,逐级返回。

                }

            }

           

        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值