Я обнаружил, что циклы for со счетчиком должны только идти от нуля до некоторого предела.
for(int i = 0; i < MAX; i++) {
....
}
Это настолько хорошо установлено, что вы можете ожидать, что любой, кто это увидит, сразу поймет, что происходит. Это также означает, что любое ОТКЛОНЕНИЕ от этой формы, считая в обратном направлении или начиная с единицы или ступая на три, усложняет понимание, потому что вам нужно признать, что оно отличается, анализировать и понимать его. Это включает в себя все ваши примеры.
Я бы предложил написать это ясно:
for(int i = 0; i < MAX; i++) {
indexFromEnd = (MAX - 1) - i;
....
}