| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2587 人关注过本帖
标题:[求助]C#问题,递归十层深度,获取出森林的所有子结点,下面的代码对吗,总觉得 ...
只看楼主 加入收藏
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
GetFloorId(id,ref subid);

把此函数也帖上来就够。
2006-12-07 17:47
fququ
Rank: 1
等 级:新手上路
威 望:1
帖 子:181
专家分:0
注 册:2004-5-30
收藏
得分:0 
没想到响应这么热烈,谢谢大家给的回答,
private void GetFloorId(long id, ref long[] subid)
{
//获取出这个人下层的六个人信息存入subid

}
这些node的连接是靠id,fatherid两个字段关联的.
这个方法是从dataset.tables中取出或从数据库中取出下一层深度的六个id而己.没有太大的用处.
这些node是自己一个一个写到数据库中的.不是treeview上的.

我正想问呢.像这种程序怎么测试啊.

[此贴子已经被作者于2006-12-7 18:47:52编辑过]


2006-12-07 18:41
舞雪
Rank: 1
等 级:新手上路
威 望:1
帖 子:1786
专家分:0
注 册:2006-10-11
收藏
得分:0 
Main函数在哪里

呵呵,不愧是BC论坛
2006-12-07 19:53
fququ
Rank: 1
等 级:新手上路
威 望:1
帖 子:181
专家分:0
注 册:2004-5-30
收藏
得分:0 
以下是引用舞雪在2006-12-7 16:05:41的发言:

偶用了goto语句,跳出了循环

怎么搞的?
贴出来让俺 学习学习吧.

这里是先写的一个方法.意义是从数据库中取出所有相关字段存到dataset中然后遍里这里面的datatable,获取出相关人员的id,在datatable中用id,fatherid进行了上层与下层的关联,保证一个上层对应6个下层.

[此贴子已经被作者于2006-12-7 20:05:22编辑过]


2006-12-07 20:00
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
13楼,看1楼的代码已经够回答了,这个问题你来回答吧,我“不懂”

14楼,他说goto只是开玩笑而已。
2006-12-07 20:27
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
if(id==0)
{
floor = 0;
return;
}

这几句没必要加,至于为什么,你自己先想想。
2006-12-07 20:30
舞雪
Rank: 1
等 级:新手上路
威 望:1
帖 子:1786
专家分:0
注 册:2006-10-11
收藏
得分:0 
[QUOTE]

private int floor=10;
private ArrayList altemp=new ArrayList();
private void GetNode(long id)
{
long[] subid = new long[6];
for(int i=0;i<6;i++)
{
subid[i]=0;
}
if(id==0)
{
floor = 0;
return;
}
else
{
if (floor == 0)
{
return;
}
floor--;
altemp.Add(id);
//GetFloorId(id,ref subid); //这里没有大用处,不用在意这里.
for (int i = 0; i < 6; i++)
{
if (subid[i] != 0 && floor<10)
{
GetNode(subid[i]);
break;
}
}
}

}

[/QUOTE]

你这个根本就递归不起来,你注意上下文,上面你把数组里面的6个元素都初始化为0,你在注意被偶标识成的代码,里面有个ref关键字,这个参数允许函数改变参数的值(涉及到引用的知识),你把这个函数注释掉了,因此数组里面的6个元素,一直是0,没有得到改变,所以最后的if判断总为假.

给你介绍点有用的东西,你把ref关键字改成out,就可以向函数传递未付值的变量,并且函数可以给这个变量付值,所以改成out关键字后,你不必给数组的每个元素付值,只要数组new了,就可以向函数里传数组变量.

[QUOTE]//GetFloorId(id,ref subid); //这里没有大用处,不用在意这里.[/QUOTE]

这个不能注释掉,否则数组里的元素将保持值为0,导致下面的if判断总为假.


[QUOTE]顺便BS一下live41[/QUOTE]

[QUOTE]13楼,看1楼的代码已经够回答了,这个问题你来回答吧,我“不懂”[/QUOTE]

本人曾经看过些心理学的书,一般说这话的人,比较狂妄,所以他看别人比他强,他眼热,就说人狂,其实就他狂。
这种人还有自私,淫贱,奸诈狡猾,下流的特点

呵呵,不愧是BC论坛
2006-12-07 21:03
舞雪
Rank: 1
等 级:新手上路
威 望:1
帖 子:1786
专家分:0
注 册:2006-10-11
收藏
得分:0 
以下是引用live41在2006-12-7 20:30:27的发言:
if(id==0)
{
floor = 0;
return;
}

这几句没必要加,至于为什么,你自己先想想。

这里只有红色的可以不加,至于为什么,请live41想想。
[UserName=fququ]

因为return后,floor就没作用了
你的代码有个严重的问题
你应当把floor放到函数体里面,因为像你这样递归,就是一种树状结构,程序一直运行到一个节点后可能会回到上一级,甚至是树根,每个节点都要有只属于自己的递归层数,不能共享一个变量。否则会出现计算结果错误的!
[/UserName]

呵呵,不愧是BC论坛
2006-12-07 21:14
舞雪
Rank: 1
等 级:新手上路
威 望:1
帖 子:1786
专家分:0
注 册:2006-10-11
收藏
得分:0 
补充:这个变量可用参数的形式传递

呵呵,不愧是BC论坛
2006-12-07 21:15
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
舞雪你太笨了,我是版主,可以看你的隐藏帖子

另外,你说递归不到,那可未必,GetFloorId(id,ref subid);

这句把subid赋了值就行,所以我才问楼主拿这个函数的代码,楼主却说无关重要
2006-12-07 21:22
快速回复:[求助]C#问题,递归十层深度,获取出森林的所有子结点,下面的代码对吗,总 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.059426 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved