这个递归函数,已经执行到return了,为啥又去执行递归函数了
这个递归函数,已经执行到return了,为什么又去执行递归函数了?
上面的这段代码,调试时我发现,程序已经执行到return abc 了,为什么又返回去执行if块中的
SearchForTopParentDepartment(departmentName.ParentDepartment, abc);了呢?
------解决方案--------------------
你不再 调试时 运行 还会return吗??
------解决方案--------------------
return之后当然还要继续执行递归啊!你最里面一层的方法return了,不就回到调用它的上一层了,然后再一层一层这样递归回去直到最开始调用的方法return才结束递归啊。。。。
楼主你最好单步追踪一个层次不太深的递归,好好把递归的执行顺序学习一下,你这里的理解明显有问题啊
------解决方案--------------------
这就是递归的特点,一层层调用,然后一层层往上返,如果调用不正常,过多,会造成 栈溢出。
------解决方案--------------------
你这个最好不用递归,用循环就可以了。
比如,类这样定义
class Department
{
string name;
Department parentDepartment;
}
在判断的地方:
Department tDepart=你的Department;
while(null!=tDepart)
{
tDepart=tDepart,parentDepartment;
}
// 到此,就找到了最高层的了
====================================
还可以采用栈的方式,直接找栈顶就可以了。
建议学学算法语言、数据结构、软件工程等,不一定要都懂,但要有个概念。软件不仅仅是编码这么简单,啰嗦甚多,仅供参考。
------解决方案--------------------
关于LZ 的代码,有以下几点要说的,觉得对的可以参考,不对的略过就可以了
1. 代码中无论什么情况下 abc 都会被重新赋值,其实是一个临时变量的用法,没必要作为参数传入
2. SearchForTopParentDepartment 是返回最高部门,那么 Line 10 中调用函数返回的结果到哪里去了呢?
3. String, string 最好统一一下吧
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);了呢?
------解决方案--------------------
你不再 调试时 运行 还会return吗??
------解决方案--------------------
return之后当然还要继续执行递归啊!你最里面一层的方法return了,不就回到调用它的上一层了,然后再一层一层这样递归回去直到最开始调用的方法return才结束递归啊。。。。
楼主你最好单步追踪一个层次不太深的递归,好好把递归的执行顺序学习一下,你这里的理解明显有问题啊
------解决方案--------------------
这就是递归的特点,一层层调用,然后一层层往上返,如果调用不正常,过多,会造成 栈溢出。
------解决方案--------------------
你这个最好不用递归,用循环就可以了。
比如,类这样定义
class Department
{
string name;
Department parentDepartment;
}
在判断的地方:
Department tDepart=你的Department;
while(null!=tDepart)
{
tDepart=tDepart,parentDepartment;
}
// 到此,就找到了最高层的了
====================================
还可以采用栈的方式,直接找栈顶就可以了。
建议学学算法语言、数据结构、软件工程等,不一定要都懂,但要有个概念。软件不仅仅是编码这么简单,啰嗦甚多,仅供参考。
------解决方案--------------------
关于LZ 的代码,有以下几点要说的,觉得对的可以参考,不对的略过就可以了
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;
}
}