Is this Recursion + Linq example inefficient? I have a hierarchy of of groups, and I want to get a collection of all the lowest level groups (or leaves if we'll look at this as a tree).

I wrote the following code. Is it inefficient?

public static class FeatureWeightGroupExtensions
{
    public static IEnumerable&lt;IFeatureWeightGroup&gt; GetLeafGroups(this IFeatureWeightGroup featureWeightGroup)
    {
        return GetLeafGroupsRecursive(featureWeightGroup).ToList();
    }

    private static IEnumerable&lt;IFeatureWeightGroup&gt; GetLeafGroupsRecursive(IFeatureWeightGroup featureWeightGroup)
    {
        if (!featureWeightGroup.ChildGroups.Any())
            return Enumerable.Repeat(featureWeightGroup, 1);

        return featureWeightGroup.ChildGroups.Aggregate(Enumerable.Empty&lt;IFeatureWeightGroup&gt;(),
                                                        (allGroups, group) =&gt;
                                                        allGroups.Concat(GetLeafGroupsRecursive(group)));
    }
}
return featureWeightGroup.ChildGroups.Aggregate(Enumerable.Empty&lt;IFeatureWeightGroup&gt;(),
                                                    (allGroups, group) =&gt;
                                                    allGroups.Concat(GetLeafGroupsRecursive(group)));


It looks like it can be replaced with:  

return featureWeightGroup.ChildGroups
           .SelectMany(g =&gt; GetLeafGroupsRecursive(group));


Which probably will not be much better from performance point of view, but looks cleaner.