Given a number N. The task is to find the number of set bits in its binary representation using recursion.
Examples:
Input : 21
Output : 3
21 represented as 10101 in binary representationInput : 16
Output : 1
16 represented as 10000 in binary representation
Approach:
- First, check the LSB of the number.
- If the LSB is 1, then we add 1 to our answer and divide the number by 2.
- If the LSB is 0, we add 0 to our answer and divide the number by 2.
- 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)