На каждую итерацию внешнего цикла (for), а именно - все, кроме первой (где i = 0) будет цикл while с количеством итераций, равным i. Можно представить это так:
i = 5
while (5 > 0)
{
...
i--;
}
while (4 > 0) { ... i--; }
...
while (1 > 0) { ... i--; }
Конец