Los artículos de wikipedia son demasiado avanzados para que yo los entienda, ¿alguien podría darme una explicación simple, por favor?
Los artículos de wikipedia son demasiado avanzados para que yo los entienda, ¿alguien podría darme una explicación simple, por favor?
Respuestas:
El contexto de los dos términos es generalmente diferente.
La referencia automática está en el contexto de los datos: tiene un tipo de datos que contiene una referencia a algo del mismo tipo.
Recursivo está en el contexto del código: tiene una función o procedimiento que se llama a sí mismo.
Ejemplo:
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
Aquí hay una función recursiva (en C):
unsigned int fibonacci(unsigned int n)
{
unsigned int result = 1;
if (n > 1)
result = fibonacci(n - 1) + fibonacci(n - 2);
return result;
}
Esas dos llamadas al fibonacci()
interior de la fibonacci()
función son llamadas recursivas .
Aquí hay una estructura de datos autorreferencial :
struct ListNode {
char *data;
struct ListNode *next;
}
El primer elemento, data
es solo un puntero a algún tipo de datos. El segundo elemento, next
es un puntero a otra ListNode
estructura. Si tiene dos o más ListNode
estructuras, puede configurar el next
puntero de una a la dirección de otra, y así sucesivamente, y luego tiene una lista vinculada . La estructura es autorreferencial porque la definición de la estructura se refiere a sí misma. Si quieres volverte loco, puedes hacer esto:
struct ListNode *node = malloc(sizeof(struct ListNode));
node->data = someString;
node->next = node;
Ahora tiene un tipo diferente de autorreferencia: no es solo la definición de lo struct ListNode
que se refiere a sí mismo ... ha establecido el next
puntero node
para que apunte a node
sí mismo. Esta es una lista circular vinculada que contiene solo un elemento. Lindo, pero no muy útil. Lo menciono porque es una especie de autorreferencia, pero no es lo que la gente suele decir cuando hablan de tipos de datos autorreferenciales.
Se espera que las recursiones, en su mayoría útiles, terminen después de cierto número de procedimientos en el sentido de que hay algún valor inicial. a menos que tenga una mala recursión que sea inútil.
Las auto-referencias, en sí mismas, no son exactamente recursiones, pero se puede demostrar que tienen recursividad, en cuyo caso generalmente nunca terminan.
La recursión implica acción.
Ejemplos:
Técnicamente, la recursividad debe tener un estado de salida, pero no es un requisito.
La autorreferencia implica estructura.
Ex. Un método de instancia que hace referencia al objeto al que está adjunto.
La recursión requiere algo para procesar mediante la llamada al mismo proceso (a menudo con diferentes parámetros). Aunque a menudo usa funciones y esas funciones se llaman a sí mismas, técnicamente ingresan a un nuevo paso que parece ser el lugar del que provienen.
Auto-referencia significa que algo se refiere a sí mismo. Las clases pueden ser autorreferenciales mediante el uso this
, pero eso no es significativamente recursivo.
recursion
se refiere a una función que se llama a sí misma, mientras que seself-reference
refiere a un objeto que hace referencia a sí mismo.