Почему циклов следует избегать?
Это вы резко прямо тему поменяли, однако, ну да ладно. Потому что они плохо выражают намерения программиста и затрудняют чтение текста программы. Поиск элемента, сумма, или итерации как вот в примере выше и много всего ещё — всё это выражается через примерно одинаково выглядящий цикл. При чтении приходится выполнять распознавание конкретного паттерна и мысленно заменять цикл на то, что он призван в данном случае выразить. Нередко один цикл делает несколько вещей сразу, что ещё более затрудняет понимание этого места. Наконец, код без циклов банально короче. Код с циклами против кода без циклов — примерно как ассемблерный код против кода на языке высокого уровня.
-- 25.01.2023, 12:34 --Вот как легко, почти как предложение обычного текста, читается строчка из примера выше: взяли текущую точку (
|&x|); нашли окружающие точки (
near_points(x).into_iter()); присоединили к ним саму нашу точку (
.chain(once(x))); выбрали ту, где значение функции минимально (
.min_by_key(|&t| f(t))); остановились, если это текущая точка(
.filter(|&t| t != x)]). И всё это в одной короткой строке. Весь алгоритм видно одним взглядом.
-- 25.01.2023, 12:40 --любой цикл можно преобразовать в рекурсивную функцию
О, я не заметил слово "рекурсивную". Преобразование цикла в рекурсию — это полезная техника, но не имеющая прямой связи с тем о чём я говорю. В примере выше нет никакой рекурсии, глобально цикл никуда не делся (он внутри функции
last) и ассемблерный код почти такой же как был бы для кода с циклом или вообще такой же.