我在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)