Когда я только начинал кодить, этот вопрос возникал довольно часто. Я подумал, зачем мне использовать цикл while, если можно использовать цикл for. В то время как цикл просто казался гораздо менее чистым и аккуратным, когда он делает то же самое, верно? Что ж, когда я начал регулярно решать задачи по программированию, я понял, что не все циклы созданы равными. Иногда лучше использовать цикл while.

Чтобы попытаться помочь объяснить, какой сценарий лучше всего подходит для того или иного случая, я приведу следующие примеры.

Цикл for лучше всего подходит для последовательного увеличения массива, строки и т. д. Другими словами, когда вы последовательно увеличиваете индекс на 1.

Цикл while может быть лучшим выбором, когда вы увеличиваете массив, строку и т. д. непоследовательным образом. Так, например, если есть условие, которое влияет на число, на которое вы увеличиваете.

Взгляните на следующую задачу HackerRank:

Какую петлю здесь лучше использовать? Ну, на самом деле нам не нужно увеличивать каждое значение в массиве «c». Если бы мы это сделали, цикл for был бы оптимальным, поскольку мы просто увеличивали бы массив на 1. В этой задаче мы пытаемся добраться до конца массива за наименьшее количество прыжков, поскольку мы может прыгать только на 1 или 2 индекса. Решение здесь состоит в том, чтобы попытаться прыгнуть на 2 клетки, но если мы не можем, то мы прыгнем на 1 клетку. Это условие, которое влияет на наше приращение, о котором я упоминал ранее. Что мы можем сделать, так это инициализировать переменную currentIndex значением 0, объявить цикл while для выполнения до тех пор, пока переменная currentIndex меньше, чем индекс последней переменной в массиве, и записать наше условие в теле этого цикла, чтобы определить, сколько индексы, на которые мы увеличиваем. Одно из решений может выглядеть так:

Я видел другие решения, использующие цикл «for» для решения этой проблемы, но, на мой взгляд, цикл «for» усложняет процесс приращения, поскольку приращение объявлено в подписи. Цикл while позволяет вам отделить приращение и манипулировать им так, как вы хотите, прямым способом. Есть много других ситуаций, когда вы можете захотеть использовать цикл while вместо цикла for или наоборот, но я надеюсь, что этот пример поможет объяснить одну из таких ситуаций.