Я столкнулся с проблемой, когда как рекурсия, так и использование цикла кажутся естественными решениями. Существует ли соглашение или "предпочтительный метод" для таких случаев? (Очевидно, это не так просто, как показано ниже)
Рекурсия
Item Search(string desired, Scope scope) {
foreach(Item item in scope.items)
if(item.name == desired)
return item;
return scope.Parent ? Search(desired, scope.Parent) : null;
}
Loop
Item Search(string desired, Scope scope) {
for(Scope cur = scope; cur != null; cur = cur.Parent)
foreach(Item item in cur.items)
if(item.name == desired)
return item;
return null;
}