递归查找C#中的最低级别项

Iai*_*der 2 c# recursion

我在GetLowestLevelFoo中缺少什么?为什么我得到答案A而不是D?

    public class Foo
    {
        public string Name { get; set; }
        public Foo ChildFoo { get; set; }
    }

    [TestFixture]
    public class Recursion
    {
        [Test]
        public void Test()
        {
            Foo foo = new Foo
            {
                Name = "A",
                ChildFoo = new Foo
                {
                    Name = "B",
                    ChildFoo = new Foo
                    {
                        Name = "C",
                        ChildFoo = new Foo
                        {
                            Name = "D"
                        }
                    }
                }
            };

            Assert.AreEqual("D", GetLowestLevelFoo(foo).Name);
        }

        public Foo GetLowestLevelFoo(Foo foo)
        {
            if (foo.ChildFoo != null)
            {
                GetLowestLevelFoo(foo.ChildFoo);
            }
            return foo;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Set*_*ore 11

当你处于最低级别时,你只想返回foo.无论怎样,你都会回来.如果您不在最低级别,则应返回递归调用返回的值.

public Foo GetLowestLevelFoo(Foo foo)
    {
        if (foo.ChildFoo != null)
        {
            return GetLowestLevelFoo(foo.ChildFoo);
        }
        else
        {
            return foo;
        }
    }
Run Code Online (Sandbox Code Playgroud)