Циклы без ошибки на единицу — типовая задача на собеседовании: выбираем подходящий цикл, формулируем инвариант и не гадаем, нужен ли знак < или ≤.
4 минуты
Сначала выберите вид цикла
Три вопроса решают, какой цикл писать. Нужны сами элементы — берите цикл по значениям. Важна позиция или соседний элемент — цикл по индексам. Число шагов заранее неизвестно и зависит от условия — цикл с условием. Правильный выбор сразу убирает половину ошибок с границами. Все три формы — в примере ниже.
Три вида циклов на одном массиве
JavaScript
constnums=[10,20,30];// 1) по значениям — нужны сами элементыletsum=0;for(constxofnums)sum+=x;// 60// 2) по индексам — важна позиция или соседfor(leti=1;i<nums.length;i++){if(nums[i]>nums[i-1]){/* строго возрастает */}}// 3) по условию — сколько шагов, заранее неизвестноleti=0;while(i<nums.length&&nums[i]>=0)i++;
Включительный диапазон: нужен ≤
JavaScript
functionsumRange(from,to){letsum=0;// to включается в диапазон, поэтому <=for(letvalue=from;value<=to;value+=1){sum+=value;}returnsum;}
Проверьте себя
Нужно сравнить каждый элемент с предыдущим. Какой цикл удобнее?