private IEnumerable <BakedOperation> RecursiveOp(
            NeuralGenome genome,
            Neuron target,
            HashSet <InnovationNumber> solvedNeurons)
        {
            if (target.IsStarting)
            {
                solvedNeurons.Add(target.InnovationNb);
                yield break;
            }

            Trace.Assert(!solvedNeurons.Contains(target.InnovationNb));

            solvedNeurons.Add(target.InnovationNb);
            yield return(() => target.Value = target.ValueCollector.InitialValue);

            foreach (var gene in genome.GetGenesToNeuron(target.InnovationNb))
            {
                var synapse = gene.Synapse;
                if (!synapse.enabled)
                {
                    continue;
                }

                if (!solvedNeurons.Contains(synapse.incoming))
                {
                    var neuronToSolve = genome.Neurons[synapse.incoming];
                    foreach (var op in RecursiveOp(genome, neuronToSolve, solvedNeurons))
                    {
                        yield return(op);
                    }
                }

                yield return(() =>
                {
                    var incommingNeurVal = genome.Neurons[synapse.incoming].Value;
                    var newDelta = synapse.Weight * incommingNeurVal;
                    var newVal = target.ValueCollector.Collect(
                        target.Value,
                        newDelta);

                    target.Value = newVal;
                });
            }

            if (target.ValueModifiers != null)
            {
                foreach (var valueModifier in target.ValueModifiers)
                {
                    yield return(() =>
                                 target.Value = (float)valueModifier(target.Value));
                }
            }

            if (target.Activation != null)
            {
                yield return(() =>
                             target.Value = (float)target.Activation(target.Value));
            }
        }