Un buen ejemplo de la vida real en los negocios es algo llamado "Lista de materiales". Estos son los datos que representan todos los componentes que conforman un producto terminado. Por ejemplo, usemos una bicicleta. Una bicicleta tiene manubrios, ruedas, un cuadro, etc. Y cada uno de esos componentes puede tener subcomponentes. por ejemplo, la rueda puede tener radios, un vástago de válvula, etc. Por lo general, estos se representan en una estructura de árbol.
Ahora, para consultar cualquier información agregada sobre la lista de materiales o para cambiar elementos en una lista de materiales, a menudo recurre a la recursividad.
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>();
}
Y una muestra de llamada 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, la clase BomPart tendría muchos más campos. Es posible que necesite averiguar cuántos componentes plásticos tiene, cuánto trabajo se necesita para construir una pieza completa, etc. Sin embargo, todo esto vuelve a la utilidad de Recursion en una estructura de árbol.