previous | index | next

Iteration Through Tail Recursion

If the last operation in a function is a call to itself, the process generated is iterative. Compare:

Racket C++
(define factorial-product
 (lambda (a b)  ; compute a x b!
  (if (= b 0)   ; as (a x b) x (b-1)!
      a
      (factorial-product (* a b) (- b 1)))))

(define factorial
  (lambda (n)
    (factorial-product 1 n)))
int factorialProduct(int a, int b)
{
  if (b == 0)
    return a;
  else
    return factorialProduct(a*b, b-1);
}

int factorial(int n)
{
  return factorialProduct(1, n);
}


previous | index | next