У меня есть вопрос о достоинствах двух разных подходов к реализации рекурсивного метода. Я всегда следовал подходу версии 1, то есть принимал один параметр Node, но недавно я столкнулся со стилем, используемым в версии 2, который принимает набор узлов.
Рассмотрим следующий класс Node вместе с двумя версиями метода Visit:
class Node
{
public List<Node> children = new List<Node>();
// other data members
}
Версия 1 принимает один параметр узла:
Visit(Node n)
{
DoSomethingUsefulWith(n);
foreach (Node child in n.children)
Visit(child);
}
Версия 2 принимает набор узлов:
Visit(List<Node> nodes)
{
foreach (Node n in nodes)
{
DoSomethingUsefulWith(n);
Visit(n.children);
}
}
Есть ли какие-либо преимущества, даже стилистически, в использовании одной формы над другой? Должен ли выбор основываться исключительно на том, начинаете ли вы с одного узла по сравнению с набором узлов, хотя было бы тривиально использовать версию любого метода в любом случае?