The first lecture of DSA was already interesting for me, I learned something about “Mutual Recursion” (when two recursive procedures call each other). The pseudo-code example was about checking if a number is either even or odd.

Given that

- 0 is even
- N is even if n-1 is odd
- N is odd if n-1 is even

And the algorithm:

1 2 3 4 5 6 7 8 9 10 |
even INPUT: n – a natural number. OUTPUT: true if n is even; false otherwise odd(n) if n = 0 then return FALSE return even(n-1) even(n) if n = 0 then return TRUE else return odd(n-1) |

I implemented a tiny C program which uses it:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
int main (int argc, char const *argv[]) { // set an integer number here int number = 23945; // if the number is odd (1 = TRUE) if(odd(number)==1) printf("%d is odd\n",number); else printf("%d is even\n",number); return 0; } // returns 0 if the given number becomes 0, so the given number is odd // returns even(number - 1) elsewhere int odd(int number){ if (number==0) return 0; else return even(number-1); } // returns 0 if the given number becomes 0, so the given number is even // returns odd(number - 1) elsewhere int even(int number){ if(number==0) return 1; else return odd(number-1); } |

tnanks alot

# define odd(n) ((n)&1)

# define even(n) (!(n&1)) or #define even(n) ((n+1)&1)

# define odd(n) ((n)%1)

# define even(n) ((n+1)%1)

what else to learn ? ..ö..

how to find a problem to an existing solution

Cheers for this smart example of using macros. However, the exercise was not to smartly implement the solution to the “even or odd?” problem.

The snippet was given in order to provide an example of implementation of mutual recursion in C.