Open In App

Count Set-bits of number using Recursion

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Given a number N. The task is to find the number of set bits in its binary representation using recursion.

Examples: 

Input : 21 
Output :
21 represented as 10101 in binary representation

Input : 16 
Output :
16 represented as 10000 in binary representation 

Approach:  

  1. First, check the LSB of the number.
  2. If the LSB is 1, then we add 1 to our answer and divide the number by 2.
  3. If the LSB is 0, we add 0 to our answer and divide the number by 2.
  4. Then we recursively follow step (1) until the number is greater than 0.

Below is the implementation of the above approach :  

C++




// CPP program to find number
// of set bist in a number
#include <bits/stdc++.h>
using namespace std;
 
// Recursive function to find
// number of set bist in a number
int CountSetBits(int n)
{
    // Base condition
    if (n == 0)
        return 0;
         
    // If Least significant bit is set
    if((n & 1) == 1)
        return 1 + CountSetBits(n >> 1);
     
    // If Least significant bit is not set
    else
        return CountSetBits(n >> 1);
}
 
// Driver code
int main()
{
    int n = 21;
     
    // Function call
    cout << CountSetBits(n) << endl;
 
    return 0;
}


Java




// Java program to find number
// of set bist in a number
class GFG
{
    // Recursive function to find
    // number of set bist in a number
    static int CountSetBits(int n)
    {
        // Base condition
        if (n == 0)
            return 0;
             
        // If Least significant bit is set
        if((n & 1) == 1)
            return 1 + CountSetBits(n >> 1);
         
        // If Least significant bit is not set
        else
            return CountSetBits(n >> 1);
    }
     
    // Driver code
    public static void main (String [] args)
    {
        int n = 21;
         
        // Function call
        System.out.println(CountSetBits(n));
    }
}
 
// This code is contributed by ihritik


Python3




# Python3 program to find number
# of set bist in a number
 
# Recursive function to find
# number of set bist in a number
def CountSetBits(n):
     
    # Base condition
    if (n == 0):
        return 0;
         
    # If Least significant bit is set
    if((n & 1) == 1):
        return 1 + CountSetBits(n >> 1);
     
    # If Least significant bit is not set
    else:
        return CountSetBits(n >> 1);
 
# Driver code
if __name__ == '__main__':
    n = 21;
     
    # Function call
    print(CountSetBits(n));
 
# This code is contributed by 29AjayKumar


C#




// C# program to find number
// of set bist in a number
using System;
 
class GFG
{
    // Recursive function to find
    // number of set bist in a number
    static int CountSetBits(int n)
    {
        // Base condition
        if (n == 0)
            return 0;
             
        // If Least significant bit is set
        if((n & 1) == 1)
            return 1 + CountSetBits(n >> 1);
         
        // If Least significant bit is not set
        else
            return CountSetBits(n >> 1);
    }
     
    // Driver code
    public static void Main ()
    {
        int n = 21;
         
        // Function call
        Console.WriteLine(CountSetBits(n));
    }
}
 
// This code is contributed by ihritik


Javascript




<script>
 
// Javascript program to find number
// of set bist in a number
 
// Recursive function to find
// number of set bist in a number
function CountSetBits(n)
{
     
    // Base condition
    if (n == 0)
        return 0;
         
    // If Least significant bit is set
    if ((n & 1) == 1)
        return 1 + CountSetBits(n >> 1);
     
    // If Least significant bit is not set
    else
        return CountSetBits(n >> 1);
}
 
// Driver code
var n = 21;
 
// Function call
document.write(CountSetBits(n));
 
// This code is contributed by Amit Katiyar
 
</script>


Output: 

3

 

Time Complexity: O(log n)

Auxiliary Space: O(log n)



Last Updated : 17 Nov, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads