string def = null;
string ghi = SearchForTopParentDepartment(dep, def);
private String SearchForTopParentDepartment(Department departmentName, String abc)
{
if (departmentName.ParentDepartment != null)
{
abc = departmentName.ParentDepartment.DepartmentName;
SearchForTopParentDepartment(departmentName.ParentDepartment, abc);
// return abc;
}
else
{
abc = departmentName.DepartmentName;
// return abc;
}
return abc;
}
上面的这段代码,调试时我发现,程序已经执行到return abc 了,为什么又返回去执行if块中的
SearchForTopParentDepartment(departmentName.ParentDepartment, abc);了呢?
11 个解决方案
#1
你不再 调试时 运行 还会return吗??
#2
在你的方法体力声明一个 string 变量,return 出你这个变量。
#3
我试了,还是不行。程序一执行到最后的括弧,就返回返回去执行if块中的
SearchForTopParentDepartment(departmentName.ParentDepartment, abc);
也返回值,但是不是我要的值。return abc;的值是我要的。
#4
return之后当然还要继续执行递归啊!你最里面一层的方法return了,不就回到调用它的上一层了,然后再一层一层这样递归回去直到最开始调用的方法return才结束递归啊。。。。
楼主你最好单步追踪一个层次不太深的递归,好好把递归的执行顺序学习一下,你这里的理解明显有问题啊
楼主你最好单步追踪一个层次不太深的递归,好好把递归的执行顺序学习一下,你这里的理解明显有问题啊
#5
那么请问,在return后,如何中断这个递归函数啊?
#6
这就是递归的特点,一层层调用,然后一层层往上返,如果调用不正常,过多,会造成 栈溢出。
#7
实在是不知道怎么做,我一return,就调用递归函数。
哪位能写一下我的需求,我学习一下。
我的需求是找到一个部门的*的部门。比如,a的上级是b,b的上级是c.c没有上级了。
下面的函数是我写的,有错误。函数的第一个参数是部门的名字,比如是部门a, 第二个参数abc是函数要返回的值,在我的例子中也就是部门a的*的部门,部门c。再比如函数的第一个参数如果是部门c,那么就执行if块内的代码,由于c没有上级部门,就直接返回c的名字。
请问诸位应该怎么写?请教了。
private String SearchForTopParentDepartment(Department departmentName, String abc)
{
// string i = null;
if (departmentName.ParentDepartment == null)
{
return departmentName.DepartmentName ;
}
else
{
abc = departmentName.ParentDepartment.DepartmentName;
SearchForTopParentDepartment(departmentName.ParentDepartment, abc);
// if
}
#8
你这个最好不用递归,用循环就可以了。
比如,类这样定义
class Department
{
string name;
Department parentDepartment;
}
在判断的地方:
Department tDepart=你的Department;
while(null!=tDepart)
{
tDepart=tDepart,parentDepartment;
}
// 到此,就找到了最高层的了
====================================
还可以采用栈的方式,直接找栈顶就可以了。
建议学学算法语言、数据结构、软件工程等,不一定要都懂,但要有个概念。软件不仅仅是编码这么简单,啰嗦甚多,仅供参考。
比如,类这样定义
class Department
{
string name;
Department parentDepartment;
}
在判断的地方:
Department tDepart=你的Department;
while(null!=tDepart)
{
tDepart=tDepart,parentDepartment;
}
// 到此,就找到了最高层的了
====================================
还可以采用栈的方式,直接找栈顶就可以了。
建议学学算法语言、数据结构、软件工程等,不一定要都懂,但要有个概念。软件不仅仅是编码这么简单,啰嗦甚多,仅供参考。
#9
关于LZ 的代码,有以下几点要说的,觉得对的可以参考,不对的略过就可以了
1. 代码中无论什么情况下 abc 都会被重新赋值,其实是一个临时变量的用法,没必要作为参数传入
2. SearchForTopParentDepartment 是返回最高部门,那么 Line 10 中调用函数返回的结果到哪里去了呢?
3. String, string 最好统一一下吧
1. 代码中无论什么情况下 abc 都会被重新赋值,其实是一个临时变量的用法,没必要作为参数传入
2. SearchForTopParentDepartment 是返回最高部门,那么 Line 10 中调用函数返回的结果到哪里去了呢?
3. String, string 最好统一一下吧
private string SearchForTopParentDepartment(Department departmentName)
{
if (departmentName.ParentDepartment != null)
{
return SearchForTopParentDepartment(departmentName.ParentDepartment);
}
else
{
return departmentName.DepartmentName;
}
}
#10
久旱逢甘露,他乡遇故知。
#11
多谢了,十分感谢。
#1
你不再 调试时 运行 还会return吗??
#2
在你的方法体力声明一个 string 变量,return 出你这个变量。
#3
我试了,还是不行。程序一执行到最后的括弧,就返回返回去执行if块中的
SearchForTopParentDepartment(departmentName.ParentDepartment, abc);
也返回值,但是不是我要的值。return abc;的值是我要的。
#4
return之后当然还要继续执行递归啊!你最里面一层的方法return了,不就回到调用它的上一层了,然后再一层一层这样递归回去直到最开始调用的方法return才结束递归啊。。。。
楼主你最好单步追踪一个层次不太深的递归,好好把递归的执行顺序学习一下,你这里的理解明显有问题啊
楼主你最好单步追踪一个层次不太深的递归,好好把递归的执行顺序学习一下,你这里的理解明显有问题啊
#5
那么请问,在return后,如何中断这个递归函数啊?
#6
这就是递归的特点,一层层调用,然后一层层往上返,如果调用不正常,过多,会造成 栈溢出。
#7
实在是不知道怎么做,我一return,就调用递归函数。
哪位能写一下我的需求,我学习一下。
我的需求是找到一个部门的*的部门。比如,a的上级是b,b的上级是c.c没有上级了。
下面的函数是我写的,有错误。函数的第一个参数是部门的名字,比如是部门a, 第二个参数abc是函数要返回的值,在我的例子中也就是部门a的*的部门,部门c。再比如函数的第一个参数如果是部门c,那么就执行if块内的代码,由于c没有上级部门,就直接返回c的名字。
请问诸位应该怎么写?请教了。
private String SearchForTopParentDepartment(Department departmentName, String abc)
{
// string i = null;
if (departmentName.ParentDepartment == null)
{
return departmentName.DepartmentName ;
}
else
{
abc = departmentName.ParentDepartment.DepartmentName;
SearchForTopParentDepartment(departmentName.ParentDepartment, abc);
// if
}
#8
你这个最好不用递归,用循环就可以了。
比如,类这样定义
class Department
{
string name;
Department parentDepartment;
}
在判断的地方:
Department tDepart=你的Department;
while(null!=tDepart)
{
tDepart=tDepart,parentDepartment;
}
// 到此,就找到了最高层的了
====================================
还可以采用栈的方式,直接找栈顶就可以了。
建议学学算法语言、数据结构、软件工程等,不一定要都懂,但要有个概念。软件不仅仅是编码这么简单,啰嗦甚多,仅供参考。
比如,类这样定义
class Department
{
string name;
Department parentDepartment;
}
在判断的地方:
Department tDepart=你的Department;
while(null!=tDepart)
{
tDepart=tDepart,parentDepartment;
}
// 到此,就找到了最高层的了
====================================
还可以采用栈的方式,直接找栈顶就可以了。
建议学学算法语言、数据结构、软件工程等,不一定要都懂,但要有个概念。软件不仅仅是编码这么简单,啰嗦甚多,仅供参考。
#9
关于LZ 的代码,有以下几点要说的,觉得对的可以参考,不对的略过就可以了
1. 代码中无论什么情况下 abc 都会被重新赋值,其实是一个临时变量的用法,没必要作为参数传入
2. SearchForTopParentDepartment 是返回最高部门,那么 Line 10 中调用函数返回的结果到哪里去了呢?
3. String, string 最好统一一下吧
1. 代码中无论什么情况下 abc 都会被重新赋值,其实是一个临时变量的用法,没必要作为参数传入
2. SearchForTopParentDepartment 是返回最高部门,那么 Line 10 中调用函数返回的结果到哪里去了呢?
3. String, string 最好统一一下吧
private string SearchForTopParentDepartment(Department departmentName)
{
if (departmentName.ParentDepartment != null)
{
return SearchForTopParentDepartment(departmentName.ParentDepartment);
}
else
{
return departmentName.DepartmentName;
}
}
#10
久旱逢甘露,他乡遇故知。
#11
多谢了,十分感谢。