数据库是这个public static int getParentId(int 13)//递归到顶级父节点,取的它的id
    {
        string sql = "select * from column_list where id=" +13;
        DataTable dt = DBHelp.GetTable(sql);
        int parintid = int.Parse(dt.Rows[0]["cl_parentID"].ToString());
        int lanmu_id = int.Parse(dt.Rows[0]["ID"].ToString());
        if (parintid > 0)
        {
            getParentId(parintid);//努力递归中
        }
        return lanmu_id;
    }根据表最后的父节点的值应该是 11  输出还是 13.。看看哪里错了。人比较笨。

解决方案 »

  1.   

    你的数据库是什么类型?为什么不用sql直接递归查询,反而用代码递归查?
    如果你只需要一个根节点,递归中,应该是return getParentId(parintid);//努力递归中
    否则,你白执行了递归,都没return回来啊
      

  2.   


    我用的是access  递归没用过。。不是很懂。。只知道自己调用自己。。能给个易懂的例子么......
      

  3.   

    ACCESS啊。。这个还真心不会玩,如果是Oracle:
    select id from table1
    connect by prior parentid = id
    start with id = 'xx';如果是DB2、SQL Server:
    with pid(id, parentid)
    as
    (
    select id,parentid from table1
    union all
    select t.id, t.parentid from table1 t, pid vt
    where t.parentid = vt.id
    )
    select id from pid;实在不行,你的用代码查询也是可以的,不过你要return 递归函数,形如:
    int GetParent(int id)
    {
    ...
    if(...)
    {
    return GetParent(newid);
    }
    }
      

  4.   

    或者如楼上上所说,递归,你需要明确你的终止条件,你参考一下最基础的求2的阶乘的例子。
    int fun(int n)
    {
    if(n==0||n==1)
    return 1;
    else
    return n*fun(n-1);
    }
      

  5.   


    public static int getParentId(int parintid)//递归到顶级父节点,取的它的id
        {
            string sql = "select * from column_list where id=" +parintid ;
            DataTable dt = DBHelp.GetTable(sql);
            int parintid = int.Parse(dt.Rows[0]["cl_parentID"].ToString());
            int lanmu_id = int.Parse(dt.Rows[0]["ID"].ToString());
            if (parintid > 0)
            {
                getParentId(parintid);//努力递归中
            }
            return lanmu_id;
        }这样就应该就行了   返回值就是11了
      

  6.   

    每次 返回都是这一条string sql = "select * from column_list where id=" +13;
    怎么递归
      

  7.   

    在别的 地方 调用一下getParentId(13);就行了
      

  8.   

    确实。。还有这个SQL的问题。。都写死参数了,也没法递归了
      

  9.   

    parintid = int.Parse(dt.Rows[0]["cl_parentID"].ToString());
    去掉int
      

  10.   


    不行啊。断点看了下,,,,,得到值11  return 后,,,,它还继续执行,跳到 if (parintid > 0)
            {
                getParentId(parintid);//
            }
            return lanmu_id;
    就这里,又执行了几遍。
      

  11.   

    谁帮我根据表 写个啊可能我写错了。要求就是给定一个任意的id  然后取出 她的顶级父级的 id。
      

  12.   

    public static int getParentId(int parintid)//递归到顶级父节点,取的它的id
        {
            string sql = "select * from column_list where id=" +parintid ;
            DataTable dt = DBHelp.GetTable(sql);
            int parintid = int.Parse(dt.Rows[0]["cl_parentID"].ToString());
            int lanmu_id = int.Parse(dt.Rows[0]["ID"].ToString());
            if (parintid > 0)
            {
                return getParentId(parintid);//努力递归中
            }
            else 
                return lanmu_id;
        }
      

  13.   


    哈哈,谢谢楼上。。可以了。不过不是很理解 if 里面为什么要用 return?
      

  14.   

    你理解了这个,就理解了
    int fun(int n)
    {
    if(n==0||n==1)
    return 1;
    else
    return n*fun(n-1);
    }