Search code examples
performancerecursioncommon-lisp

Efficiency: recursion vs loop


This is just curiosity on my part, but what is more efficient, recursion or a loop?

Given two functions (using common lisp):

(defun factorial_recursion (x)
    (if (> x 0)
        (* x (factorial_recursion (decf x)))
        1))

and

(defun factorial_loop (x)
    (loop for i from 1 to x for result = 1 then
        (* result i) finally
        (return result)))

Which is more efficient?


Solution

  • I don't even have to read your code.

    Loop is more efficient for factorials. When you do recursion, you have up to x function calls on the stack.

    You almost never use recursion for performance reasons. You use recursion to make the problem more simple.