Вы нарушаете основную концепцию рекурсии - рекурсия вместо итерации.Вот как вы это сделаете:
int colour[5]={0};
void _do(int i)
{
if (i < sizeof(colour))
{
colour[i]=1;
_do(i + 1);
}
}
По сути, вы или итерируете, или рекурсив.Какой из них лучше, зависит от ситуации, типа структуры данных, поведения других используемых вами функций и т. Д.
В этом конкретном случае, однако, я бы обычно повторял.
По конкретному вопросу: побочным эффектом функции является изменение массива colour
, что означает, что все изменения будут немедленно применены к этому массиву автоматически.