# Как оптимизировать циклы

Иногда вам будут встречаться затратные по времени циклы или рекурсивные функции, которые окажутся узкими местами в вашей программе. Перед тем, как вы попытаетесь ускорить цикл, потратьте некоторое время на то, чтобы понять, можно ли избавиться от него полностью. Сработает ли здесь какой-нибудь другой алгоритм? Можно ли вычислить это параллельно с другим вычислением? Если вам не удалось найти обходной путь, тогда оптимизируйте цикл. Это просто: вынесите из него все, что можно. В конце концов, эта операция требует не только смекалки, но и понимания, сколько затрачивается на каждое выражение и операцию. Вот несколько предложений:

* Уберите операции с плавающей точкой
* Не выделяйте впустую новые блоки памяти
* Держите константы в одном месте
* Вынесите операции чтения и записи в буфер
* Старайтесь не использовать деление
* Старайтесь не использовать затратные приведения типов данных
* Перемещайте указатель вместо того, чтобы пересчитывать индексы

Стоимость каждой из этих операций зависит от вашей конкретной системы. Где-то компиляторы и аппаратное обеспечение выполнят их вместо вас. Разумеется, чистый и эффективный код лучше, чем тот, который требует понимания специфичной платформы.

Следующее: [Как справиться с расходами на операции чтения и записи](https://braydie.gitbook.io/how-to-be-a-programmer/ru/1-beginner/personal-skills/08-how-to-deal-with-io-expense)
