递归算法

来源:互联网 发布:备份软件购买 编辑:程序博客网 时间:2024/05/17 03:22

今天为了解决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作为参数传过去,继续查找它的子节点                    //每次递归都会等待下级节点查询完毕返回,在继续遍历下一个同级级节点                    //也就是说它会等递归到末级节点后,逐级返回。                }            }                   }