Перейти к содержимому
Тема 6 из 16
Теория

Циклы

Зачем это нужно

Компьютер хорош тем, что не устаёт повторять. Вывести сто строк, проверить тысячу чисел, пройти по всем товарам в корзине — для этого есть циклы: код, который выполняется много раз подряд.

Цикл for

Самый частый цикл — со счётчиком:

for (let i = 1; i <= 5; i++) {
  console.log("Шаг", i);
}

Вывод:

Шаг 1
Шаг 2
Шаг 3
Шаг 4
Шаг 5

В скобках три части через ;:

  1. let i = 1 — начало: создаём счётчик (выполняется один раз);
  2. i <= 5 — условие: пока оно верно, цикл крутится;
  3. i++ — шаг: что делать со счётчиком после каждого повтора.

Один проход тела цикла называют итерацией. Счётчик может идти и в обратную сторону, и с другим шагом:

for (let i = 10; i > 0; i -= 3) {
  console.log(i);
}

Вывод:

10
7
4
1

Накопление результата

Типичный приём — завести переменную до цикла и копить в ней:

let total = 0;
for (let i = 1; i <= 4; i++) {
  total += i * i;
}
console.log(total);

Вывод:

30

(1 + 4 + 9 + 16 = 30)

Цикл while

while крутится, пока условие верно. Удобен, когда заранее неизвестно, сколько будет шагов:

let money = 1000;
let years = 0;
while (money < 2000) {
  money *= 1.1;  // +10% в год
  years++;
}
console.log("Удвоится через", years, "лет");

Вывод:

Удвоится через 8 лет

do … while

То же, но условие проверяется после тела — поэтому тело выполнится хотя бы один раз:

let n = 0;
do {
  console.log("Выполнился, хотя n =", n);
} while (n > 0);

Вывод:

Выполнился, хотя n = 0

break и continue

  • break — немедленно выйти из цикла;
  • continue — пропустить остаток текущего шага и перейти к следующему.
for (let i = 1; i <= 10; i++) {
  if (i % 2 === 0) continue; // чётные пропускаем
  if (i > 7) break;          // после 7 — стоп
  console.log(i);
}

Вывод:

1
3
5
7

В функции вместо break часто пишут return — он выходит и из цикла, и из функции сразу.

Вложенные циклы

Цикл внутри цикла — например, таблица умножения:

for (let row = 1; row <= 3; row++) {
  let line = "";
  for (let col = 1; col <= 3; col++) {
    line += row * col + " ";
  }
  console.log(line);
}

Вывод:

1 2 3
2 4 6
3 6 9

Как это работает внутри

Движок выполняет for так: начало → проверка условия → тело → шаг → проверка → тело → шаг… пока условие не станет ложным. Если условие никогда не станет ложным, получится бесконечный цикл: программа зависнет. На сайте такой код остановится по таймеру с ошибкой. Поэтому всегда проверяй, что счётчик действительно движется к выходу.

Про скорость: проверка делителей до √n вместо n — огромная разница. Для n = 1 000 000 007 это около 31 623 шагов вместо миллиарда. Если у числа есть делитель больше √n, то у него обязательно есть и парный делитель меньше √n — его мы найдём раньше.

Частые ошибки

  1. Бесконечный цикл. Забыли i++ или изменение переменной в while — цикл никогда не закончится.
  2. Ошибка на единицу. i < 5 даёт 1…4, а i <= 5 — 1…5. Проверяй границы на маленьком примере.
  3. Переменная-копилка внутри цикла. for (…) { let sum = 0; sum += i; } — сумма каждый раз обнуляется. Объявляй копилку до цикла.
  4. return внутри цикла раньше времени. return true в первой же итерации прервёт проверку. Возвращай «успех» только после цикла.
  5. Точка с запятой после скобок. for (…); { … } — у цикла пустое тело, а блок выполнится один раз.

Шпаргалка

Что Как
Со счётчиком for (let i = 0; i < n; i++) { … }
Пока верно while (условие) { … }
Хотя бы раз do { … } while (условие);
Выйти из цикла break
К следующему шагу continue
Копилка let sum = 0; до цикла, sum += … внутри

Сумма до n

Лёгкая+10 XP

Допиши функцию sumTo(n), которая возвращает сумму всех целых чисел от 1 до n включительно. Если n меньше 1, сумма равна 0.

sumTo(3)   → 6      (1 + 2 + 3)
sumTo(10)  → 55
sumTo(0)   → 0

Подключи коннектор, чтобы решать задачи

Код задач выполняется на твоём компьютере — так быстрее и надёжнее, чем в браузере. Для этого нужна бесплатная программа-коннектор CodeWithMe. Подключить её нужно один раз.

Ищем коннектор на этом компьютере…

  1. 1
    Скачай коннектор для своей системы (Windows, macOS или Linux).Скачать коннекторНа странице загрузки выбери файл со своей системой в названии, например windows-amd64.
  2. 2Запусти его и выбери папку, где будут лежать твои решения. Python и Node.js он поставит туда сам, когда понадобится.
  3. 3
    Введи ниже код из 6 цифр — он написан в окне коннектора («Код для сайта CodeWithMe»). Если браузер спросит про доступ к локальной сети — разреши.

Коннектор открытый (исходный код на GitHub), работает только на твоём компьютере и выполняет код лишь после ввода кода сопряжения.