Это не самое быстрое или лучшее решение, но я нашел тот же вопрос на моем пути, и я начал думать и думать. наконец, я понял, что это можно сделать так, если вы получите проблему с математической стороны и нарисуете график, тогда вы обнаружите, что это функция, которая имеет некоторую периодическую часть, а затем вы понимаете разницу между периодами ... так что здесь вы идете:
unsigned int f(unsigned int x)
{
switch (x) {
case 0:
return 0;
case 1:
return 1;
case 2:
return 1;
case 3:
return 2;
default:
return f(x/4) + f(x%4);
}
}