Я использую ракетка (и производной схемы/Lisp), и я написал этот алгоритм Фибоначчи, который использует Гидроаккумуляторы:Как я могу вычислить эффективность этого алгоритма Фибоначчи?
(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)))
Это большой шаг вперед по сравнению с функцией, которая не использует аккумуляторы, как следующее :
(define (fibonacci n)
(if (<= n 1) n
(+ (fibonacci (- n 1))
(fibonacci (- n 2)))))
Но как я могу установить рекуррентные уравнения для расчета как много более эффективным это?
Вы хотя бы попытались вычислить сложность своего кода? – eliasah
Я только что узнал, как делать Recurrence, и нам всегда давали некоторую формулу, такую как T (n) = T (n/3) + n^2. Я не научился анализировать код и придумывать какую-то формулу повторения. Я пришел сюда в надежде, что кто-то сможет показать мне, как использовать код, который я написал, чтобы я мог обернуть вокруг себя голову. –
Я не хочу в одиночку закрываться как обман, потому что я принял ответ - но это действительно обман: | http://stackoverflow.com/q/7547133/572670 – amit