Um bom exemplo da vida real nos negócios é algo chamado "Lista de Materiais". Estes são os dados que representam todos os componentes que compõem um produto acabado. Por exemplo, vamos usar uma bicicleta. Uma bicicleta possui guidões, rodas, quadro, etc. E cada um desses componentes pode ter subcomponentes. por exemplo, a Roda pode ter Raios, uma haste de válvula, etc. Normalmente, eles são representados em uma estrutura de árvore.
Agora, para consultar qualquer informação agregada sobre a lista de materiais ou para alterar elementos em uma lista técnica, muitas vezes você recorre à recursão.
class BomPart
{
public string PartNumber { get; set; }
public string Desription { get; set; }
public int Quantity { get; set; }
public bool Plastic { get; set; }
public List<BomPart> Components = new List<BomPart>();
}
E uma amostra de chamada recursiva ...
static int ComponentCount(BomPart part)
{
int subCount = 0;
foreach(BomPart p in part.Components)
subCount += ComponentCount(p);
return part.Quantity * Math.Max(1,subCount);
}
Obviamente, a classe BomPart teria muitos mais campos. Você pode precisar descobrir quantos componentes de plástico você tem, quanto trabalho é necessário para construir uma peça completa, etc. Tudo isso volta à utilidade da Recursão em uma estrutura de árvore.