Como otros señalaron, analizar la recursividad puede ser muy difícil muy rápido. Aquí hay otro ejemplo de tal cosa: http://rosettacode.org/wiki/Mutual_recursion http://en.wikipedia.org/wiki/Hofstadter_sequence#Hofstadter_Female_and_Male_sequences
es difícil calcular una respuesta y un tiempo de ejecución para estos. Esto se debe a que estas funciones mutuamente recursivas tienen una "forma difícil".
De todos modos, veamos este sencillo ejemplo:
http://pramode.net/clojure/2010/05/08/clojure-trampoline/
(declare funa funb)
(defn funa [n]
(if (= n 0)
0
(funb (dec n))))
(defn funb [n]
(if (= n 0)
0
(funa (dec n))))
Comencemos tratando de calcular funa(m), m > 0
:
funa(m) = funb(m - 1) = funa(m - 2) = ... funa(0) or funb(0) = 0 either way.
El tiempo de ejecución es:
R(funa(m)) = 1 + R(funb(m - 1)) = 2 + R(funa(m - 2)) = ... m + R(funa(0)) or m + R(funb(0)) = m + 1 steps either way
Ahora escojamos otro ejemplo un poco más complicado:
Inspirado por http://planetmath.org/encyclopedia/MutualRecursion.html , que es una buena lectura en sí misma, echemos un vistazo a: "" "Los números de Fibonacci se pueden interpretar mediante recursión mutua: F (0) = 1 y G (0 ) = 1, con F (n + 1) = F (n) + G (n) y G (n + 1) = F (n). "" "
Entonces, ¿cuál es el tiempo de ejecución de F? Nosotros iremos por el otro lado.
Bueno, R (F (0)) = 1 = F (0); R (G (0)) = 1 = G (0)
Ahora R (F (1)) = R (F (0)) + R (G (0)) = F (0) + G (0) = F (1)
...
No es difícil ver que R (F (m)) = F (m), por ejemplo, el número de llamadas a funciones necesarias para calcular un número de Fibonacci en el índice i es igual al valor de un número de Fibonacci en el índice i. Esto supone que sumar dos números juntos es mucho más rápido que una llamada a función. Si este no fuera el caso, entonces esto sería cierto: R (F (1)) = R (F (0)) + 1 + R (G (0)), y el análisis de esto habría sido más complicado, posiblemente sin una solución fácil de forma cerrada.
La forma cerrada para la secuencia de Fibonacci no es necesariamente fácil de reinventar, sin mencionar algunos ejemplos más complicados.