Given a number **N**, the task is to calculate the total number of corresponding different bit in the binary representation for every consecutive number from **0 to N**.

**Examples:**

Input:N = 5Output:8Explanation:

Binary Representation of numbers are:

0 -> 000,

1 -> 001,

2 -> 010,

3 -> 011,

4 -> 100,

5 -> 101

Between 1 and 0 -> 1 bit is different

Between 2 and 1 -> 2 bits are different

Between 3 and 2 -> 1 bit is different

Between 4 and 3 -> 3 bits are different

Between 5 and 4 -> 1 bit is differentTotal = 1 + 2 + 1 + 3 + 1 = 8

Input:N = 11Output:19

For Naive and Efficient Approach please refer to the previous post of this article.

**More Efficient Approach:** To optimize the above methods, we can use Recursion. To solve the problem, the following observations need to be made

Number: 0 1 2 3 4 5 6 7 Difference: 1 2 1 3 1 2 1 4 Sum: 1 3 4 7 8 10 11 15

We can observe that for **N = [1, 2, 3, 4, …..]**, the sum of different bits in consecutive elements forms the sequence **[1, 3, 4, 7, 8, ……]**. Hence, **N ^{th}** term of this series will be our required answer, which can be calculated as:

a(n) = a(n / 2) + n; with base case as a(1) = 1

Below is the implementation for above Recursive approach:

## C++

`// C++ program to find the sum` `// of bit differences between` `// consecutive numbers` `// from 0 to N using recursion` ` ` `#include <bits/stdc++.h>` `using` `namespace` `std;` ` ` `// Recursive function to find sum` `// of different bits between` `// consecutive numbers from 0 to N` `int` `totalCountDifference(` `int` `n)` `{` ` ` ` ` `// Base case` ` ` `if` `(n == 1)` ` ` `return` `1;` ` ` ` ` `// Calculate the Nth term` ` ` `return` `n` ` ` `+ totalCountDifference(n / 2);` `}` ` ` `// Driver Code` `int` `main()` `{` ` ` `// Given Number` ` ` `int` `N = 5;` ` ` ` ` `// Function Call` ` ` `cout << totalCountDifference(N);` ` ` `return` `0;` `}` |

## Java

`// Java program to find the sum` `// of bit differences between` `// consecutive numbers from ` `// 0 to N using recursion` `class` `GFG{` ` ` `// Recursive function to find sum` `// of different bits between` `// consecutive numbers from 0 to N` `static` `int` `totalCountDifference(` `int` `n)` `{` ` ` ` ` `// Base case` ` ` `if` `(n == ` `1` `)` ` ` `return` `1` `;` ` ` ` ` `// Calculate the Nth term` ` ` `return` `n + totalCountDifference(n / ` `2` `);` `}` ` ` `// Driver Code` `public` `static` `void` `main(String[] args)` `{` ` ` ` ` `// Given number` ` ` `int` `N = ` `5` `;` ` ` ` ` `// Function call` ` ` `System.out.println(totalCountDifference(N));` `}` `}` ` ` `// This code is contributed by himanshu77` |

## Python3

`# Python3 program to find the sum` `# of bit differences between` `# consecutive numbers from` `# 0 to N using recursion` ` ` `# Recursive function to find sum` `# of different bits between` `# consecutive numbers from 0 to N` `def` `totalCountDifference (n):` ` ` ` ` `# Base case` ` ` `if` `(n ` `=` `=` `1` `):` ` ` `return` `1` ` ` ` ` `# Calculate the Nth term` ` ` `return` `n ` `+` `totalCountDifference(n ` `/` `/` `2` `)` ` ` `# Driver code` ` ` `# Given number` `N ` `=` `5` ` ` `# Function call` `print` `(totalCountDifference(N))` ` ` `# This code is contributed by himanshu77` |

## C#

`// C# program to find the sum` `// of bit differences between` `// consecutive numbers from` `// 0 to N using recursion` `using` `System;` ` ` `class` `GFG{` ` ` `// Recursive function to find sum` `// of different bits between` `// consecutive numbers from 0 to N` `static` `int` `totalCountDifference(` `int` `n)` `{` ` ` ` ` `// Base case` ` ` `if` `(n == 1)` ` ` `return` `1;` ` ` ` ` `// Calculate the Nth term` ` ` `return` `n + totalCountDifference(n / 2);` `}` ` ` `// Driver Code` `public` `static` `void` `Main()` `{` ` ` ` ` `// Given number` ` ` `int` `N = 5;` ` ` ` ` `// Function call` ` ` `Console.WriteLine(totalCountDifference(N)); ` `}` `}` ` ` `// This code is contributed by himanshu77` |

**Output:**

8

**Time Complexity:** O(log_{2}N)**Auxiliary Space:** O(1)