一千萬個為什麽

搜索

在C#中遞歸查找最低級別的項目

我在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;
        }
    }

最佳答案

你只想在最低級別返回foo。無論怎樣,你都會回來。如果您不在最低級別,則應返回遞歸調用返回的值。

public Foo GetLowestLevelFoo(Foo foo)
    {
        if (foo.ChildFoo != null)
        {
            return GetLowestLevelFoo(foo.ChildFoo);
        }
        else
        {
            return foo;
        }
    }

轉載註明原文: 在C#中遞歸查找最低級別的項目