Primero debemos decidir qué es realmente la recursión. Cuando toma una función recursiva, puede existir una transformación que se deshaga de la recursión, pero introduce estado . En otros casos, la transformación tendrá que introducir estado y iteración. Por lo tanto, escribir una función de forma recursiva es una forma de establecer el estado y posiblemente la iteración implícita , en lugar de explícita . En otras palabras, la recursión es solo una forma de escribir la cosa.
El estado está ahí de todos modos , simplemente no lo está anotando explícitamente en el papel. En lenguajes como C, las llamadas a funciones recursivas generalmente almacenan su estado en la pila.
Ahora, cualquier circuito que tenga estado (carga almacenada, energía, etc.) - y eso será todo, en realidad - es, por definición, recursivo. No es necesaria ninguna iteración :)
Concretamente, trabajemos en un filtro IIR de primer orden. Su salida puede ser dada por una función recursiva. Dada una señal de entrada x(t)
, la salida y(x(t), t) = a1*y(x(t-1), t-1) + b0*x(t)
, donde a1
y b0
son constantes que parametrizan la respuesta. Esto está en tiempo discreto: t
es un número entero con la unidad de un número de ciclos de reloj.
La implementación de C, suponiendo que t>=0
y x(-1) == 0
, sería:
float a1, b0;
// Recursive, Implicit State
float y(float (*x)(int), int t) {
return t != 0 ? a1 * y(x(t-1), t-1) + b0 * x(t) : b0 * x(t);
}
// Non-Recursive, Explicit State
float y(float (*x)(int), int t) {
static float y_prev = 0.0;
if (1) { // optional to ensure correct use only
static int t_prev = 0;
assert(t_prev == t-1 || t == 0);
}
return y_prev = a1 * y_prev + b0 * x(t);
}
El código también se puede implementar como un filtro de respuesta de impulso infinito de condensador conmutado de primer orden. Ciertamente puede construir un sistema de este tipo:
simular este circuito : esquema creado usando CircuitLab
SW1 cambia dos veces en cada ciclo de reloj. Con los valores mostrados, para una precisión de 12 bits, el reloj está limitado a 10 kHz debido a la constante de tiempo R4-C1. U1, U2, U3 son seguidores de voltaje, por ejemplo, amplificadores operacionales configurados para ganancia = 1.
Si configuramos a1=(1-b0)
y lo transformamos en una ecuación diferencial de tiempo continuo, podemos obtener la "misma" respuesta (continua) con un circuito RC:
simular este circuito
Aquí, T es el período de reloj del reloj que alimenta el circuito del capacitor conmutado que se encuentra arriba, y U1 es un seguidor de voltaje.
Cuando las frecuencias de interés se limitan a ~ 1/10 de la frecuencia de reloj, los circuitos de tiempo continuo y tiempo discreto (capacitor conmutado) responden de la misma manera.
Ambos circuitos, y el código, pueden ser modelados por una función recursiva, también conocida como una relación de recurrencia .