Для начала нужно
оформить код так, чтобы его было удобно читать. Это само по себе позволит лучше понять, что происходит. Вообще аккуратность и внимательность способствуют пониманию и уменьшают ошибки, это как бы очевидно.
Далее следует уделить внимание логике работы программы, то есть ее описанию. Сейчас описание у вас такое, что глаза можно сломать, пытаясь понять, что же должна делать программа. Нужно подтянуть оформление вопроса в плане русского языка, пунктуации, падежей. В самой программе переменные должны иметь говорящие названия. То есть не qwe, а осмысленное имя, про start и out нужны комментарии, что они делают и т.д.
Если это не поможет, то можно на выбор:
- Заняться отладкой программы, то есть пошагово смотреть, как программа выполняется, и соотносить это с логикой её работы.
- Попытаться доказать работу программы чисто математически, как учили в школе. То есть из-за использования циклов и рекурсии понадобится применить метод математической индукции.