En matemáticas e informática, una clase de objetos o métodos exhibe un comportamiento recursivo cuando pueden definirse mediante dos propiedades:
Condición de referencia simple: no usar un caso terminal en el que la recursividad produce una respuesta
Un conjunto de reglas reduce todos los demás casos a una condición básica
Por ejemplo, aquí está la definición recursiva del antepasado de alguien:
Los padres de alguien Una persona son sus antepasados (condición de referencia)
Los antepasados de los antepasados de alguien también son sus antepasados (pasos recursivos)
La secuencia de Fibonacci es un ejemplo clásico de recursividad:
Fib(0) = 1 condición inicial 1;
Fib(1) = 1 condición inicial 2;
Para todos los números enteros n, n > 1: Fib (n) = (Fib(n-1) + Fib(n-2)).
Muchos axiomas matemáticos se basan en reglas recursivas. Por ejemplo, la definición formal de números naturales mediante los axiomas de Peano se puede describir como: 0 es un número natural y todo número natural tiene un número sucesor, que también es un número natural. Con esta condición básica y reglas recursivas, se puede generar el conjunto de todos los números naturales.
Los objetos matemáticos definidos recursivamente incluyen funciones, conjuntos y especialmente fractales.
También existen varias "definiciones" irónicas de recursividad.
Definición informal
La recursión es cuando un paso de un programa implica llamar al programa mismo. El proceso de pasar por la recursividad se llama "recursividad".
Para comprender la recursividad, debes reconocer la diferencia entre un programa y la ejecución de un programa. Un procedimiento es un conjunto de pasos basados en un conjunto de reglas. Ejecutar un programa en realidad implica seguir reglas y ejecutar pasos. Una analogía: un programa es como una receta escrita; ejecutar un programa es como preparar una comida.
La recursividad está relacionada, pero no es lo mismo, con las referencias en las especificaciones de procedimientos a otras ejecuciones de programas. Por ejemplo, una receta puede referirse a cocinar verduras, mientras que pasos como agregar agua son otro procedimiento. Sin embargo, un proceso recursivo es aquel en el que (al menos) uno de los pasos requiere una nueva instancia del mismo proceso, al igual que una receta de masa madre requiere algo de masa sobrante de la última vez que se hizo la misma receta. Esto crea inmediatamente la posibilidad de un bucle infinito; la recursividad solo se puede usar correctamente en definiciones como una receta de masa madre, que también le indica si en algunos casos se omite el paso en cuestión para que el programa se complete. masa en caso de que nunca hayas hecho masa antes. Incluso si se define correctamente, un procedimiento recursivo no es fácil de ejecutar para los humanos porque requiere distinguir entre llamadas nuevas y antiguas al procedimiento (la ejecución parcial requiere cierta gestión de hasta qué punto han progresado las distintas instancias sincronizadas del programa); Por tanto, las definiciones recursivas son muy raras en situaciones cotidianas. Un ejemplo podría ser el siguiente proceso de encontrar el camino a través de un laberinto, continúa hasta llegar a la salida o al punto de bifurcación (un callejón sin salida se considera un punto de bifurcación con 0 bifurcaciones). Si el punto alcanzado es una salida, terminar. De lo contrario, utilice el procedimiento de forma recursiva, probando cada rama por turno; si cada intento falla al llegar a un callejón sin salida, regrese al camino que condujo a ese punto de rama e informe el error. Si esto realmente define el proceso de terminación depende de la naturaleza del laberinto: no permite bucles. En cualquier caso, realizar este proceso requiere registrar cuidadosamente todos los puntos de bifurcación actualmente explorados, así como qué bifurcaciones se han probado exhaustivamente.
En Lengua
El lingüista Noam Chomsky y muchos otros creen que no existe un límite superior para el número de oraciones gramaticales en un idioma, ni para la longitud de las oraciones gramaticales (más allá de las limitaciones prácticas). como el tiempo que se tarda en hablar), esto se puede explicar como consecuencia de la recursividad en el lenguaje natural. Esto puede entenderse en términos de definiciones recursivas de categorías sintácticas, como oraciones. Una oración puede tener una estructura en la que un verbo va seguido de otra oración: Dorothy piensa que las brujas son peligrosas, en cuya estructura, Las brujas son peligrosas aparece en una forma más amplia. oración. Por lo tanto, una oración puede definirse recursivamente (de manera muy aproximada) como una estructura que consta de un sintagma nominal, un verbo y, opcionalmente, otra oración. En realidad, este es solo un caso especial de la definición matemática de recursividad.
Esto proporciona una manera de entender la creación del lenguaje - un número infinito de oraciones gramaticales - porque predice inmediatamente que las oraciones pueden tener cualquier longitud: Dorothy piensa que Toto duda de que el Leñador de Hojalata haya dicho... ...Hay muchas estructuras además de las oraciones que se pueden definir de forma recursiva, por lo que hay muchas formas en que una oración puede incrustar instancias de una categoría en otra categoría. A lo largo de los años, el lenguaje en general ha demostrado ser susceptible a este tipo de análisis.
Sin embargo, más recientemente, Daniel Everett ha cuestionado la opinión generalmente aceptada de que la recursividad es una propiedad fundamental del lenguaje humano, basándose en sus afirmaciones sobre Pyrrha. Andrew Nevins, David Pesetsky y Cilene Rodrigues se encuentran entre los muchos que se oponen a esta idea. En cualquier caso, la autorreferencia literaria puede considerarse distinta de la recursión matemática o lógica.
La recursividad juega un papel crucial no sólo en la gramática, sino también en la semántica del lenguaje natural. Por ejemplo, la palabra y puede entenderse como una función que se puede aplicar a los significados de oraciones para crear nuevas oraciones, y también se puede usar para significados de frases sustantivas, significados de frases verbales y otras. También funciona con verbos intransitivos, transitivos o ditransitivos. para proporcionarle una representación única adecuadamente flexible, y generalmente se define de manera que pueda tomar cualquiera de estos diferentes tipos de significados como argumentos. Esto se puede lograr definiéndolo para un caso simple en el que combina oraciones y luego definiendo recursivamente otros casos basados en el caso simple.
La gramática recursiva es una gramática formal que contiene reglas de generación recursiva.
Humor de recursividad
La recursividad se utiliza a veces con humor en los libros de texto de informática, programación, filosofía o matemáticas, generalmente dando una definición circular o autorreferencia, en la que una definición circular o self En la cita, los pasos recursivos supuestos no se acercan a las condiciones de referencia, sino que conducen a una regresión infinita. No es raro que un libro de este tipo incluya una entrada de chiste en el glosario, algo como:
Otro chiste es "Para entender la recursividad, debes entender la recursividad en la versión inglesa de Google". motor de búsqueda web. Al buscar "recursividad", el sitio pregunta "¿Quiso decir: recursividad?". Otra versión de esto de Andrew Plotkin es la siguiente: "Si ya sabe qué es la recursividad, memorice la respuesta. De lo contrario, busque a alguien". más cercano que tú. Habla con alguien como Douglas Hofstadter; luego pregúntale qué es la recursividad."
El acrónimo recursivo también puede ser un ejemplo de humor recursivo. Por ejemplo, PHP significa "preprocesador de hipertexto PHP", WINE significa "WINE no es un emulador" y GNU significa "GNU no es Unix".
En matemáticas
Conjuntos definidos recursivamente
Ejemplo: números naturales
Un ejemplo típico de un conjunto definido recursivamente viene dado por los números naturales números:
0 es un número natural;
Si n es un número natural, entonces n+1 también es un número natural;
El conjunto de números naturales números es el conjunto más pequeño que satisface las dos primeras propiedades.
Ejemplo: El conjunto de proposiciones verdaderamente alcanzables
Otro ejemplo interesante es el conjunto de todas las proposiciones "verdaderamente alcanzables" en un sistema axiomático.
Si una proposición es un axioma, es una proposición verdaderamente alcanzable.
Una proposición es verdaderamente alcanzable si se puede obtener a partir de una proposición verdaderamente alcanzable mediante reglas de inferencia.
El conjunto de proposiciones verdaderamente alcanzable es el conjunto más pequeño de proposiciones que satisface estas condiciones.
Este conjunto se llama "proposiciones verdaderas alcanzables" porque, en un enfoque no constructivo de los fundamentos matemáticos, el conjunto de proposiciones verdaderas puede ser mayor que el conjunto construido recursivamente a partir de axiomas y reglas de inferencia. Reglas de subdivisión finita
Las reglas de subdivisión finita son formas geométricas recursivas que se pueden utilizar para crear imágenes similares a fractales. La regla de subdivisión comienza con una colección de polígonos etiquetados por un número finito de etiquetas y luego subdivide cada polígono en polígonos etiquetados más pequeños de una manera que depende solo de la etiqueta del polígono original, un proceso que se puede repetir. La técnica estándar del "tercio medio" para crear conjuntos de Cantor es la regla de subdivisión, al igual que la subdivisión centroide. Recursión de funciones
Una función se puede definir parcialmente en términos de sí misma.
Un ejemplo común es la secuencia de Fibonacci: F(n) = F(n? 1) + F(n? 2). Para que dicha definición sea útil, debe introducir valores que estén definidos de forma no recursiva, en este caso, F(0) = 0, F(1) = 1.
Una función recursiva famosa es la función de Ackerman, que se diferencia de la secuencia de Fibonacci en que no se puede expresar sin recursividad. Pruebas que involucran definiciones recursivas
Como se mencionó en secciones anteriores, la aplicación de técnicas estándar de prueba de casos a conjuntos o funciones definidas recursivamente da como resultado la inducción estructural, una poderosa forma de generalización matemática, ampliamente utilizada en pruebas de derivación en lógica matemática. y ciencias de la computación. Optimización recursiva
La programación dinámica es un método de optimización que reformula un problema de optimización de varias etapas o pasos de forma recursiva. El resultado clave de la programación dinámica es la ecuación de Bellman, que escribe valores de los primeros (o pasos anteriores) del problema de optimización en valores posteriores (o pasos posteriores). Teorema de recursividad
En teoría de conjuntos, este es un teorema que garantiza la existencia de funciones definidas recursivamente. Dado un conjunto X, un elemento a en el conjunto X y una función f: F(0)=a , F(n+1)=f(F(n)) (para cualquier número natural n).
Prueba de unicidad
Tome dos funciones F: N-->X y G: N-->X tales que:
F(0 )= a
G(0)=a
F(n+1)=f(F(n))
G(n+1) =f (G(n))
Donde a es un elemento del conjunto X.
La inducción matemática puede demostrar que F(n)=G(n) para todos los números naturales:
Condición de referencia: cuando n=0, la ecuación F(0)= a= G(0) se cumple;
Pasos recursivos: Supongamos que cuando k∈N, F(k)=G(K) se cumple, entonces F(k+1)=f(F(k) )= f(G(k))=G(k+1), por lo tanto F(k)=G(k) significa F(k+1)=G(k+1)
Pasado por inducción, F(n)=G(n) (donde n∈N).
En informática
Un método de simplificación común es dividir un problema en subproblemas del mismo tipo. Como técnica de programación informática, esto se conoce como divide y vencerás y es clave para el diseño de muchos algoritmos importantes. Divide y vencerás es un enfoque de arriba hacia abajo para la resolución de problemas resolviendo instancias cada vez más pequeñas. El enfoque opuesto es la programación dinámica, que es un enfoque ascendente que resuelve el problema resolviendo instancias cada vez más grandes hasta alcanzar el tamaño deseado.
Un ejemplo clásico de recursividad es la definición de la función factorial, que se proporciona aquí en código C:
unsigned int factorial(unsigned int n) {undefinido
if (n == 0) {undefinido
devuelve 1;
} else {undefinido
devuelve n * factorial(n - 1);
}
}
La función se llama a sí misma recursivamente en una versión más pequeña de la entrada (n-1) y multiplica el resultado de la llamada recursiva por n hasta se alcanza la línea de base Condición, similar a la definición matemática de factorial.
La recursividad en la programación informática es un ejemplo de esto cuando una función se define como una versión más simple, a menudo más pequeña, de sí misma. Luego se diseña una solución al problema combinando soluciones obtenidas de versiones más simples del problema. Un ejemplo de aplicación de recursividad es el analizador de un lenguaje de programación. La mayor ventaja de la recursividad es que un programa de computadora finito puede definir, analizar o generar un conjunto infinito de posibles oraciones, diseños u otros datos.
Una relación de recurrencia es una secuencia de ecuaciones que define recursivamente una o más secuencias. Ciertos tipos de relaciones de recurrencia se pueden "resolver" para obtener definiciones no recursivas.
En el ámbito del arte
La muñeca rusa o muñeca matrioska es un ejemplo de arte físico de un concepto recursivo.
La recursividad se ha utilizado en pintura desde el Tríptico Stefaneschi de Giotto en 1320. Su panel central contiene una figura arrodillada del cardenal Stefaneschi, sosteniendo el tríptico como ofrenda.
M.C. Eschers Print Gallery (1956) representa una ciudad retorcida dentro de una galería que contiene imágenes de forma recursiva y, por tanto, infinita.