12. Хвостовая рекурсия. Коллекции Range. foldLeft, reduce, product (Уроки программирования на Scala)
Функциональная альтернатива циклам - рекурсия. Но как избежать переполнения стека и неэффективного исполнения рекурсивных методов? Также в Scala продвинутая стандартная библиотека, в частности коллекции. В данном уроке приведу в пример коллекцию Range и методы коллекций foldLeft, reduce, product. Эффективность кода при использовании функциональных альтернатив цикла while почти такая же как и с циклом. А краткость, красота и безошибочность твоих алгоритмов вырастает в разы. 00:00 Вступление 00:40 Рекурсия. Вычисление факториала с помощью рекурсии. 04:50 Стек. Ошибка переполнения стека (StackOverflowError) 06:14 Хвостовая рекурсия. Оптимизация хвостовой рекурсии. 07:20 Вычисление факториала с помощью хвостовой рекурсии. 09:00 Как оптимизируется хвостовая рекурсия - исследование в декомпиляторе. 10:20 Преимущество рекурсии перед циклом while 10:39 Аннотация tailrec 11:43 Коллекция Range и метод foldLeft. Факториал с помощью foldLeft. 13:52 Функциональные литералы (лямбда-выражения). Синтаксический сахар. 16:16 Эффективность Range и foldLeft. Смотрим исходники. 18:39 reduce и product - реализация функции факториала с помощью этих методов. ------------------------------------------------------- Рекомендую к просмотру: 5. Функциональные литералы (лямбда-выражения): • 5. Функции. Функциональные типы, функциона... 10. Цикл for и for-comprehension (есть также примеры с коллекцией Range): • 10. For-Comprehensions. Цикл for, выражени... 11. Цикл while: • 11. Цикл while и цикл do-while (Уроки Scala) #ityoutubersru #scala #alexelkin