Я вижу код, который используется для вычисления общего количества 1-битов во всех целых числах в диапазоне (0, а).
int count(int a)
{
int sum = 0;
while(a)
{
sum +=1;
a = a & (a-1);
}
return sum;
}
long solve(int a)
{
if(a == 0) return 0 ;
if(a % 2 == 0) return solve(a - 1) + count(a) ;
return ((long)a + 1) / 2 + 2 * solve(a / 2) ;
}
Я могу понять функцию подсчета, но действительно не могу понять повторение в решении:
if (a%2 ==1)
solve(a) = (a+1)/2 + 2* solve(a/2)
Есть ли кто-нибудь, кто может объяснить немного это? Большое спасибо.