这个递归函数,已经执行到return了,为啥又去执行递归函数了

这个递归函数,已经执行到return了,为什么又去执行递归函数了?
 
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;
    }
}