Почему код улетает в бесконечный цикл?
Это происходит потому, что не происходит увелечение инкремента,  условно когда итерация заканчивается код делает в вашем случае следующее i + 1, но т.к нету оператора присваивания (=), то i и не увеличивается. Обычно пишут i++, что равносильно i += 1.
Потому что i тогда не изменяется