Referencia circular
Una referencia circular (o ciclo de referencia) es una serie de referencias donde el último objeto hace referencia al primero, lo que da como resultado un bucle cerrado.

Ejemplo simple
Un recién llegado le pregunta a un lugareño dónde está la biblioteca de la ciudad. "Justo enfrente de la oficina de correos" dice el lugareño. El recién llegado asiente y continúa: "¿Pero dónde está la oficina de correos?"
"Bueno, eso es simple" responde el local. "¡Está justo detrás de la biblioteca!"
En idioma
Una referencia circular no debe confundirse con la falacia lógica de un argumento circular. Aunque una referencia circular a menudo será inútil y no revelará información, como dos entradas en el índice de un libro que se refieren entre sí, no necesariamente significa que una referencia circular no sea de utilidad. Los diccionarios, por ejemplo, siempre deben ser, en última instancia, una referencia circular, ya que todas las palabras de un diccionario se definen en términos de otras palabras, pero, no obstante, un diccionario sigue siendo una referencia útil. Las oraciones que contienen referencias circulares aún pueden tener significado:
- Su hermano le dio un gatito; su hermana le agradeció por ello.
es circular, pero no carece de significado. De hecho, se puede argumentar que la autorreferencia es una consecuencia necesaria de la Ley de no contradicción de Aristóteles, un axioma filosófico fundamental. Desde este punto de vista, sin autorreferencia, la lógica y las matemáticas se vuelven imposibles o, al menos, carecen de utilidad.
En programación informática
Las referencias circulares pueden aparecer en la programación de computadoras cuando un fragmento de código requiere el resultado de otro, pero ese código necesita el resultado del primero. Por ejemplo, las dos funciones posn y plus1 en el siguiente programa Python comprenden una referencia circular:
def posn()k: int) - No. int: si k c) 0: Regreso plus1()k) Regreso kdef plus1()n: int) - No. int: Regreso posn()n + 1)
Las referencias circulares como el ejemplo anterior pueden devolver resultados válidos si tienen una condición final. Si no hay una condición de terminación, una referencia circular conduce a una condición conocida como livelock o bucle infinito, lo que significa que, en teoría, podría ejecutarse para siempre.
def posn()k: int) - No. int: Regreso plus1()k)def plus1()n: int) - No. int: Regreso posn()n + 1)
En el estándar ISO, las restricciones de integridad circular de SQL se admiten implícitamente dentro de una sola tabla. Entre varias tablas se permiten restricciones circulares (por ejemplo, claves externas) definiendo las restricciones como aplazables (consulte CREATE TABLE para PostgreSQL y Ejemplos de restricciones DEFERRABLES para Oracle). En ese caso, la restricción se verifica al final de la transacción, no en el momento en que se ejecuta la declaración DML. Para actualizar una referencia circular, se pueden emitir dos declaraciones en una sola transacción que satisfará ambas referencias una vez que se confirme la transacción.
Las referencias circulares también pueden ocurrir entre instancias de datos de un tipo mutable, como en este script de Python:
mydict = {} "esto": "eso", "ellos": "aquellos"}mydict["Yo mismo"] = mydictimpresión()mydict)
La imprimir La función span>(mydict)
generará {'esto': 'aquello'< span class="p">, 'estos': 'esos', 'yo mismo': {...}}< /span>
, donde {...}
indica una referencia circular, en este caso, a la mydict código> diccionario.
En hojas de cálculo
Las referencias circulares también ocurren en hojas de cálculo cuando dos celdas requieren el resultado de la otra. Por ejemplo, si el valor de la celda A1 se obtiene sumando 5 al valor de la celda B1 y el valor de la celda B1 se obtiene sumando 3 al valor de la celda A1, no se pueden calcular valores. (Incluso si las especificaciones son A1:=B1+5 y B1:=A1-5, todavía hay una referencia circular. No ayuda que, por ejemplo, A1=3 y B1=-2 satisfagan ambas fórmulas, ya que hay infinitos otros valores posibles de A1 y B1 que pueden satisfacer ambos casos).
La referencia circular en hojas de trabajo puede ser una técnica muy útil para resolver ecuaciones implícitas como la ecuación de Colebrook y muchas otras, que de otro modo podrían requerir tediosos algoritmos de Newton-Raphson en VBA o el uso de macros.
En los procesos que contienen una referencia circular, se debe hacer una distinción entre aquellos que son incomputables y aquellos que son un cálculo iterativo con un resultado final. Estos últimos pueden fallar en hojas de cálculo que no están equipadas para manejarlos, pero aún así son lógicamente válidos.