Вы можете смотреть на это как на вопрос производительности/оптимизации, но можно смотреть как на вопрос "отзывчивости" — быстро показать пользователю "общий вид", а потом вычислять только то, что он попросит против "сначала всё вычислить, а потом показывать что нужно" — либо как на вопрос "степени извращённости" кода при заданной производительности. Потому что прямолинейная реализация + reverse + ленивость даёт нужный результат, но того же результата можно добиться, "вывернув алгоритм наизнанку" и добавив "инфраструктурного кода" вокруг.