Search code examples
cfunctionrecursiondefinition

do this using recursion only


Write a recursive function evenDigits that accepts an integer parameter n and returns a new integer containing only the even digits from n, in the same order. If n does not contain any even digits, return 0.

For example, the call of evenDigits(8342116) should return 8426 and the call of evenDigits(35179) should return 0.


Solution

  • Here are my five cents.:)

    #include <stdio.h>
    
    int evenDigits( int n )
    {
        const int Base = 10;
    
        int digit = n % Base;
    
        int even = digit % 2 == 0;
    
        if ( !even ) digit = 0;
    
        return ( n /= Base ) == 0 ? digit 
                                  : ( even ? Base : 1 ) * evenDigits( n ) + digit;
    }
    
    int main(void) 
    {
        printf( "evenDigits( 8342116 ) = %d\n", evenDigits( 8342116 ) );
        printf( "evenDigits( -8342116 ) = %d\n", evenDigits( -8342116 ) );
        printf( "evenDigits( 35179 ) = %d\n", evenDigits( 35179 ) );
        printf( "evenDigits( -35179 ) = %d\n", evenDigits( -35179 ) );
    
        return 0;
    }
    

    The program output is

    evenDigits( 8342116 ) = 8426
    evenDigits( -8342116 ) = -8426
    evenDigits( 35179 ) = 0
    evenDigits( -35179 ) = 0