¿Cuál es el concepto de la función recursiva en matemáticas?

En matemáticas (e informática teórica) la noción de función recursiva (o funciones recursivas [math] \ mu [/ math], como también se las llama) se refiere a una clase particular de funciones parciales que mapean tuplas de números naturales a un número natural. La clase contiene aquellas funciones parciales que se pueden considerar computables, y se puede demostrar que estas son exactamente las funciones que puede calcular una máquina de Turing, suponiendo una codificación razonable de números en cintas de Turing. La clase es una extensión de la clase de funciones recursivas primitivas , y estrictamente más grande que esta clase.

La definición de la clase procede primero definiendo ciertas funciones básicas que están en la clase y luego definiendo operadores que nos permiten construir inductivamente funciones más complejas a partir de las existentes.

Funciones recursivas básicas:

  • Funciones cero : para cada número [matemática] n [/ matemática] hay una función [matemática] 0 ^ n: \ Bbb {N} ^ n \ to \ Bbb {N} [/ matemática] tal que [matemática] 0 ^ n (x_1, \ ldots, x_n) = 0 [/ math] para todos los números [math] x_1, \ ldots, x_n [/ math].
  • Sucesor : hay una función [matemática] S: \ Bbb {N} \ to \ Bbb {N} [/ matemática] tal que [matemática] S (x) = x + 1 [/ matemática].
  • Proyección : por cada dos números naturales [matemática] n [/ matemática] y [matemática] i [/ matemática] st [matemática] 1 \ leq i \ leq n [/ matemática], hay una función [matemática] \ pi ^ n_i: \ Bbb {N} ^ n \ to \ Bbb {N} [/ math] tal que [math] \ pi ^ n_i (x_1, \ ldots, x_n) = x_i [/ ​​math] para todos los números [math] x_1 , \ ldots, x_n [/ math].

Operadores para construir la función recursiva:

  • Composición : dada una función [matemática] f: \ Bbb {N} ^ n \ to \ Bbb {N} [/ matemática] y funciones [matemática] g_1: \ Bbb {N} ^ m \ to \ Bbb {N}, \ ldots, g_n: \ Bbb {N} ^ m \ to \ Bbb {N} [/ math] hay una función [math] f \ circ (g_1, \ ldots, g_n): \ Bbb {N} ^ m \ a \ Bbb {N} [/ math] tal que si [math] h = f \ circ (g_1, \ ldots, g_n) [/ math] entonces [math] h (\ bar {x}) = f (g_1 ( \ bar {x}), \ ldots, g_n (\ bar {x})) [/ math] donde [math] \ bar {x} [/ math] denota [math] x_1, \ ldots, x_m [/ math] .
  • Recurrencia primitiva : funciones dadas [matemáticas] f: \ Bbb {N} ^ n \ to \ Bbb {N} [/ matemáticas] y [matemáticas] g: \ Bbb {N} ^ {n + 2} \ a \ Bbb { N} [/ math] hay una función [math] \ rho (f, g): \ Bbb {N} ^ {n + 1} \ to \ Bbb {N} [/ math] tal que si [math] h = \ rho (f, g) [/ math] entonces, suponiendo que [math] \ bar {x} [/ math] denota [math] x_1, \ ldots, x_n [/ math], sostiene que
    • [matemática] h (0, \ bar {x}) = f (\ bar {x}) [/ matemática], y
    • [matemática] h (y + 1, \ bar {x}) = g (y, h (y, \ bar {x}), \ bar {x}) [/ matemática].
  • Minimización : dada una función [matemática] f: \ Bbb {N} ^ {n + 1} \ a \ Bbb {N} [/ matemática] hay una función [matemática] \ mu (f): \ Bbb {N} ^ {n} \ to \ Bbb {N} [/ math] tal que si [math] h = \ mu (f) [/ math] entonces, suponiendo que [math] \ bar {y} [/ math] denota [math ] y_1, \ ldots, y_n, [/ math] el resultado de [math] h (\ bar {y}) [/ math] es el número natural más pequeño [math] z [/ math] tal que [math] f ( z, \ bar {y}) = 0 [/ matemáticas]. Si no existe dicho número natural, entonces [matemática] h (\ bar {y}) [/ matemática] no está definida.

La clase de funciones recursivas se define entonces como la clase más pequeña que contiene la función recursiva básica y se cierra bajo los operadores dados para construir funciones recursivas. En otras palabras, contiene las funciones que se pueden construir a partir de las funciones recursivas básicas y utilizando los operatros dados un número finito de veces.

Algunas observaciones rápidas:

  • Si omitimos el operador de minimización, obtenemos la definición de funciones recursivas primitivas. Observe que este operador es el único que nos permite construir funciones parciales que a partir de funciones totales. De hecho, la clase de funciones recursivas primitivas contiene solo funciones totales.
  • La clase de funciones recursivas primitivas es estrictamente más pequeña que la clase de funciones recursivas. Esto no solo es cierto porque solo contiene funciones totales, sino que también hay funciones recursivas totales que no son recursivas primitivas. Un ejemplo bien conocido de esto es la función de Ackermann.

Una función recursiva es una función en la que su valor en cualquier punto puede determinarse a partir de los valores de la función en algunos puntos anteriores. Como ejemplo, considere la función [matemática] f (n) = f (n-1) + f (n-2) [/ matemática] que se define sobre números enteros no negativos. Claramente, si tenemos el valor de la función en [matemática] n = 0 [/ matemática] y [matemática] n = 1 [/ matemática], podemos encontrar su valor en cualquier otro número entero no negativo.

Un muy buen ejemplo práctico de una función recursiva es el “Método de Newton” que encuentra mejores y mejores aproximaciones de las raíces de una función.

Por ejemplo, para encontrar la raíz cuadrada de 2, deje f (x) = x ^ 2 – 2 (de modo que una solución sea la raíz cuadrada de 2).

Podríamos adivinar la raíz cuadrada de 2 dejando que x0 sea 1.

Por el método de Newton, [matemáticas] x1 = x0- f (x) / f ‘(x) [/ matemáticas]

[matemáticas] x1 = x0 – (x ^ 2 – 2) / (2x) [/ matemáticas]

[matemáticas] x2 = x1 – (x ^ 2 – 2) / (2x) [/ matemáticas]

etc.

Al usar repetidamente esta función, x1 = 2, x2 = 1.5, x3 = 1.41666667, x4 = 1.414215 y podemos ver que esto está convergiendo rápidamente a la raíz cuadrada de 2.

Para obtener más información sobre el método de Newton, consulte Método de Newton – Wikipedia

More Interesting

Cómo resolver el problema M_SEQ en SPOJ

¿Existe algún algoritmo de clasificación con O (n) en el tiempo y O (n ^ 2) en la complejidad del espacio?

¿Por qué todos me dicen que aprenda la estructura de datos y los algoritmos si quiero obtener un trabajo de desarrollo de software?

¿Qué cosas (lenguajes de programación, algoritmos, etc.) aprendió Ashish Kedia después de completar su primer año?

¿Por qué las listas enlazadas son más convenientes que las matrices en el dominio de la computación simbólica?

¿Cuál es el algoritmo que utilizan los ferrocarriles indios para la confirmación de un boleto de espera? ¿Cuál es la mejor manera de confirmar un boleto cuando hay una gran lista de espera?

Cómo resolver el problema del "número mínimo de cortes"

En el algoritmo de búsqueda A * deberíamos tener una lista abierta y otra cerrada. ¿Cómo los implementa utilizando tanto el hashmap como una cola prioritaria en Java?

¿Por qué el introsort se convierte de quicksort a heapsort después de cierta profundidad?

¿Cuáles son las diferentes formas en que puede obtener la longitud de una matriz en C ++?

Cómo hacer una matriz de entradas de usuario en JavaScript

¿Qué nivel / conocimiento de programación debería tener para obtener el máximo provecho de CLRS? [Más detalles en mi respuesta contraída]

¿Cuál es una explicación simple de por qué BFS bidireccional se ejecuta en [math] \ Theta (\ sqrt {n}) [/ math]?

¿Cuál es la diferencia entre un código y un algoritmo?

¿Qué aplicación utiliza el algoritmo?