range(0,a) 内のすべての整数の 1 ビットの総数を計算するために使用されるコードが表示されます。
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) ;
}
count 関数は理解できますが、solve の再帰は本当に理解できません:
if (a%2 ==1)
   solve(a) = (a+1)/2 + 2* solve(a/2)
少し説明できる人はいますか?どうもありがとう。