Короче, тут чувак озадачился ручным переписыванием рекурсии в цикл и, внезапно (но я это подозревал!), что эмуляция рекурсии оказалась
медленнее.
1. foo1 is the naive implementation, and also the fastest
2. foo2 is the manually managed implementation, slightly slower
3. foo3 is the implementation using futures - very pretty, but slowest
https://github.com/ImmutableBug/recursion_optimizationДисклеймер: я не запускал бенчмарк, но ревью кода не выявило каких-то ужасных проблем с реализацией, код нормальный. Можно было преаллоцировать Vec во втором случае, но это было бы не совсем честно.
@sirgraim @DogeShibu я бы выбрал (1) как более чистую реализацию.