Danny Denenberg
   About    Listings    Projects    Feed

My favorite way of telling if a number is odd or even

My uncle (a CS guy) once gave me an interesting puzzle: write a function to tell if a number is even or odd without using the modulus operator (e.g. “%”).

At that time he had just given me “Let’s Talk Lisp”, a book about the programming language Lisp and about recursive thinking in general.

Thus, my answer to his question was this:

(defun odd (n) 
  (cond ((= n 1) t) ;; if n is 1
         (t (even (- n 1))))) ;; otherwise call even(n-1)

(defun even (n) 
  (cond ((= n 1) nil) ;; if n is 1, it's NOT even
         (t (odd (- n 1))))) ;; otherwise call odd(n-1)

Or, if TypeScript/JavaScript works better for you:

function odd(n: number): boolean {
  if (n == 1) return true;
  return even(n - 1);
}

function even(n: number): boolean {
  if (n == 1) return false;
  return odd(n - 1);
}

Try it! If you call odd(3) it recursively bounces the function from one to the other and spits out true. Same with even(4) and odd(9) and even(48938).

Kinda cool, thanks Larry.