I'm using Racket (derivative of Scheme/Lisp), and I wrote this Fibonacci Algorithm which uses Accumulators:
(define (fibonacci* n)
(local (; NaturalNumber NaturalNumber NaturalNumber -> NaturalNumber
; Add accumulators for current and previous fibonacci numbers
(define (fibonacci-acc x current previous)
(if (= x n) current
(fibonacci-acc (add1 x) (+ current previous) current))))
(fibonacci-acc 0 0 1)))
This is a BIG improvement over a function that doesn't use accumulators, like the following:
(define (fibonacci n)
(if (<= n 1) n
(+ (fibonacci (- n 1))
(fibonacci (- n 2)))))
But how can I set up recurrence equations to calculate how much more efficient it is?