Recursividad
-
Upload
fabian-araya -
Category
Documents
-
view
100 -
download
1
Transcript of Recursividad
![Page 1: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/1.jpg)
Funciones recursivas
Roberto Moriyón
![Page 2: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/2.jpg)
Ejemplo: Función de Ackerman
• F(i,x) = (i=0) ? x+1 : ((x=0) ? F(i-1,1) :F(i-1,F(i,x-1)))
• Ejemplos:F(0,x) = x+1F(1,1) = F(0,F(1,0)) = F(0,F(0,0)) = F(0,1) = 2F(1,2) = F(0,F(1,1)) = F(0,2) = 3F(1,x) = F(0,F(1,x-1)) = … = F(0,x) = x+1F(2,1) = F(1,F(2,0)) = F(1,F(1,1)) = F(1,2) = 3F(2,x) = F(1,F(2,x-1)) = … = F(1,2x-1) = 2x+1…
![Page 3: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/3.jpg)
Definiciones recursivas primitivas
• Ejemplo con un argumento:F(x+1) = 2*F(x) F(x+1) = g(F(x))F(0) = 1 F(0) = h
• Definición general:F(x1+1, x2, …, xn) = g(F(x1, x2, …, xn), x1, x2, …, xn)
F(0, x2, …, xn) = h(x2, …, xn)
• Ejemplos: La definición de Ackerman no lo esF(x+1,y) = F(x, y)+2F(0,y) = y+2
![Page 4: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/4.jpg)
Funciones recursivas primitivas: Funciones básicas
• Las funciones recursivas básicas numéricas son:– Sucesor: s(x) = x+1– Anulación: n(x) = (x=0) ? 1 : 0
– Proyecciones: uin(x1, …, xn) = xi
![Page 5: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/5.jpg)
Funciones recursivas primitivas
• Se pueden definir a partir de las básicas mediante recursión primitiva y composición
• Ejemplos:– F(x) = s(s(x))– G(x+1, y) = F(G(x, y))
G(0,y) = F(y)
![Page 6: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/6.jpg)
Composición
• En general, si f(x1,…,xn), g1(y1,…,ym),…, gn(y1,…,ym) son funciones, diremos que la función
h(y1,…,ym) = f(g1(y1,…,ym),…,gn(y1,…,ym))se obtiene a partir de ellas mediante composición.
• En realidad corresponde a la composición de G con f, donde G es la función vectorial con coordenadas g1, …, gn.
![Page 7: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/7.jpg)
Totalidad y computabilidad de las funciones recursivas primitivas
• Si f es RP, es total• La función prev: N - { 0 } N definida mediante
prev(x+1) = x
no es total (y tampoco RP)• Las funciones RP son computables, pues tanto
f(x)=y como f(x)y se pueden determinar algorítmicamente en tiempo finito.
![Page 8: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/8.jpg)
EJERCICIOS: Demostrar que las siguientes funciones son RP
• [RPN1] fk(x) = k• [RPN2] suma(x, y)• [RPN3] restap(x, y) // Da 0 si y > x• [RPN4] producto(x, y)• [RPN5] restaabs(x, y) // |x-y|• [RPN6] positivo(x) // x > 0 ? 1 : 0• [RPN7] max(x, y)• [RPN8] min(x, y)• [RPN9] factorial(x)• [RPN10] potencia(x, y) // xy
• [RPN11] par(x) // x = 2*(x/2) ? 1 : 0
![Page 9: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/9.jpg)
EJERCICIOS: Demostrar que las siguientes funciones son RP
• [RPN12] cocientedefecto(x, 2)• [RPN13] cocientedefectop(x, y) // (x, 0) 0• [RPN14] iguales(x, y)• [RPN15] menoroigual(x, y)• [RPN16] menor(x, y)• [RPN17] divisor(x, y)• [RPN18] primo(x)• [RPN19] restodivision(x, y)• [RPN20] primomayor(x) // Primero mayor• [RPN21] mcd(x, y)• [RPN22] mcm(x, y)
![Page 10: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/10.jpg)
Funciones recursivas primitivas sobre cadenas de caracteres
• Las funciones recursivas básicas sobre cadenas de caracteres son:– Anteposición: s(x). Ejemplo:
sa(“abc”)=“aabc”– Vacuidad: v(x) = (x=) ? : – Proyecciones ui
n(x1, …, xn) = xi
• Ejemplos:• f(x) = s(s(x))• g(,y) = fab(y)
g(sa(x),y) = fab(g(x,y))
g(sb(x),y) = fba(g(x,y))
![Page 11: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/11.jpg)
Funciones recursivas primitivas sobre cadenas de caracteres, II
• Una recursión primitiva sobre cadenas está formada por ||+1 reglas:f(s(w1),x2,…,wn) = g(f(w1,w2,…,wn),w1,w2,…, wn)
f(0, w2, …, wn) = h(w2, …, wn)
donde cada g y h son funciones recursivas primitivas.
• Las funciones recursivas primitivas sobre cadenas también son totales y computables
![Page 12: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/12.jpg)
Funciones recursivas primitivas sobre cadenas de caracteres, III
• La función resto: + * que elimina el primer carácter no es total ni, por lo tanto, recursiva primitiva
![Page 13: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/13.jpg)
EJERCICIOS: Demostrar que las siguientes funciones son RP
• [RPC1] fv(w) = v
• [RPC2] start(v) // start(“ab”)=“a”, start(0) = 0• [RPC3] fin(v) // end(“ab”)=“b”, end(0)=0
• [RPC4] cuenta(v) // cuentaa(“abbaba”)=“aaa”
• [RPC5] concatena(v, w)• [RPC6] invierte(v)• [RPC7] esPalíndrome(v)• [RPC8] esVacía(v)
![Page 14: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/14.jpg)
EJERCICIOS: Demostrar que las siguientes funciones son RP
• [RPC9] iguales(v, w)
• [RPC10] contiene(v, w)// contiene(“abcba”, “bcb”) = “a”
// contiene(“abcba”, “bab”) = 0
• [RPC11] sustituye(u, v, w)
• [RPC12] longitud(v)// longitud(“abc”) = “aaa”
![Page 15: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/15.jpg)
Funciones recursivas primitivas: Suma recursiva
• Suponemos que f(n) es recursiva primitiva
• g(m) = f(0) + f(1) + … + f(m)– g(0) = 0– g(m+1) = suma(g(m), f(s(m)) = h(g(m),m)
donde
h(x,y) = suma(x,f(s(y))
es primitiva recursiva, luego g también lo es.
![Page 16: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/16.jpg)
Ejercicios
• Suponemos que f(m) es recursiva primitiva. Demostrar que las siguientes funciones también lo son: [RPA1], [RPA2], [RPA3], [RPA4]– g(m,x) = min(f(0), f(1), …, f(m))– g(m,x) = f(f(…f(f(x))…))// m concatenaciones de f– g(x) = 1 si mx, f(m)=0, y g(x) = 0 en caso
contrario– g(x) = 1 si ∀mx, f(m)=0, y g(x) = 0 en caso
contrario
![Page 17: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/17.jpg)
Totalidad y computabilidad de la función de Ackerman
• F(i,x) = (i=0) ? x+1 : ((x=0) ? F(i-1,1) :F(i-1,F(i,x-1)))
• Es total• Es computable• Sin embargo, no es recursiva primitiva:
– Fj(x) = F(j, x) = Fj-1(Fj-1(…(Fj-1(0)…))– Fx(x) crece más rápido que cualquier función
de la sucesión f0(x)=x+1, fj+1(x)=fj(fj(…(fj(0)…))– Las funciones R.P. crecen como alguna de las
funciones anteriores
![Page 18: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/18.jpg)
Formas de definición de las funciones recursivas
• Definición usual: Aplicar la definición repetidamente, utilizando una pila de cálculos parciales, hasta que se llegue al resultado
• Ejemplo: Para la función de Ackerman,
F(1,1) = F(0,F(1,0)) = F(0,F(0,0)) = F(0,1) = 2
![Page 19: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/19.jpg)
Formas de definición de las funciones recursivas, II
• Forma rigurosa (aunque teórica):
• Definir F sobre un primer dominio, D0, donde se puede calcular directamente– Ejemplo: Para la función de Ackerman,
D0={(i,x)|i=0}, en cuyo caso f0(i,x)=x+1
• Definir F sobre un dominio Dj+1 si su cálculo se puede reducir al de F sobre Dj
– Ejemplo: D1=D0 {(i,x) | x=0}; f∪ 1(i,x) = …
– D2=D1 {(1,1)}; f∪ 2(i,x) = …, etc
![Page 20: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/20.jpg)
Formas de definición de las funciones recursivas, III
• Interpretación de la forma anterior: punto fijo de un operador– P(f)(x) = (i=0) ? x+1 : ((x=0) ? f(i-1,1) :
f(i-1,f(i,x-1)))– P(f0) = f1
– P(f1) = f2
– …– F es un punto fijo de P: P(F) = F
![Page 21: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/21.jpg)
EJERCICIOS
• [REC 1] Calcular el dominio y los valores de las imágenes de las funciones f y g definidas mediante– f(x,y) = 2.f(y, 2.x)– g(x) = (x < 5) ? f(x, x) : ((x = 5) ? 1 : x*g(x-1))
• [REC 2] Calcular el dominio y los valores de las imágenes de la función h definida medianteh(x, y) = (x = 0) ? 1 : h(x – 1, h(|x – y|, y))
![Page 22: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/22.jpg)
Funciones recursivas: Minimización
• Si f(x,y) es una función recursiva, entonces
g(x) = min { y | f(x,y) ≠ 0 }
define otra función recursiva– Demostración: Definimos
gaux(x, z) = min { y | f(x, z+y) ≠ 0 }
entonces
– gaux(x, z) = (f(x, z) ≠ 0) ? 0 : 1 + gaux(x, z+1)
– g(x) = gaux(x,0)
![Page 23: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/23.jpg)
EJERCICIOS
• Suponiendo que la función f(x,y) sea recursiva, demostrar que también lo es la función g(x) cuyo valor es la suma f(x,0) + f(x,1) + … + f(x,n) donde n se elije de manera que los sumandos sean diferentes de 0 y f(x,n+1)=0.
![Page 24: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/24.jpg)
Ejemplo de funciones recursivas: Máquinas de Turing
• Dada una máquina de Turing determinista M, la función transita(x, y), donde x e y son estados instantáneos de ejecución de M, que vale “a” si la máquina M lleva la cinta del estado x al y y en caso contrario, es recursiva (pero no recursiva primitiva)
![Page 25: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/25.jpg)
Ejemplo de funciones recursivas: Máquinas de Turing, II
• Demostración:transita(x, y) = esEstado(x) & esEstado(y) &
& ((x=y) ? “a” : transita(aplicaRegla(x), y))
• La función aplicaRegla(x) devuelve el resultado de aplicar una regla de transición de M a partir del estado de ejecución x; si no se puede, devuelve x.
• EJERCICIO: [MT REC] Demostrar que las funciones esEstado(x) y aplicaRegla(x) son recursivas primitivas.
![Page 26: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/26.jpg)
Ejemplo de funciones recursivas: Máquinas de Turing, III
• Dada una máquina de Turing determinista M, la función ejecuta(x, y), donde x, y*, que devuelve el estado instantáneo de ejecución de M a partir de y después de |x| transiciones, es recursiva primitiva.
• Demostración:
ejecuta(, y) = Sqº(y)
ejecuta(S(x), y) =aplicaRegla(ejecuta(x, y))
![Page 27: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/27.jpg)
Ejemplo de funciones recursivas: Máquinas de Turing, IV
• Dada una máquina de Turing determinista M, la función produce(x), que a cada cadena x le hace corresponder el contenido de la cinta cuando M se para a partir de x es recursiva (pero puede no ser recursiva primitiva)
• Demostración:produce(x) =
quitaEstado(ejecuta(x,miny(para(ejecuta(x, y)))))• Observación: miny se puede definir en este caso
de forma análoga a como se hace con números.
![Page 28: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/28.jpg)
Forma normal de funciones recursivas
• Todas las funciones recursivas se pueden escribir en la forma
f(x) = p(miny(q(x, y)))
donde p y q son funciones recursivas primitivas.
• Las funciones p y q se pueden elegir de manera que p simplemente elimine el contenido de la cinta previo a un separador.
![Page 29: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/29.jpg)
Forma normal: programas
• La construcción anterior también se puede hacer con programas en lugar de máquinas de Turing: a partir de cualquier programa podemos construir otro equivalente que incorpora un contador y emula al primero paso a paso y cuando el inicial se para sigue ejecutándose sin hacer nada y guardando en una variable booleana fin la información de que el programa emulado ha terminado.
![Page 30: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/30.jpg)
Forma normal: programas, II
• El cálculo del programa inicial se puede realizar buscando el valor mínimo del contador del programa emulador para el cual la variable fin es cierto, y devolviendo la variable que contiene el valor del programa emulado.
![Page 31: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/31.jpg)
Ejemplo de funciones recursivas: Máquinas de Turing, V
• Si una máquina de Turing tiene una definición mediante submáquinas que es recursiva, la función que define sobre cadenas de caracteres es recursiva.
• Como consecuencia de lo anterior, las máquinas de Turing definidas recursivamente mediante submáquinas no proporcionan un mecanismo de computación más potente que las máquinas de Turing simples.
![Page 32: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/32.jpg)
Ejemplo de funciones recursivas: Máquinas de Turing, VI
• La demostración de la afirmación anterior se basa en la función FM(q, u, x, v), que da el estado final de ejecución (q’, u’, x’, v’) calculado por la máquina a partir del estado q con la palabra uxv sobre la cinta, apuntando a la x. Su definición es
FM(q, u, x, v) = FM(q’, 234(FN(q, u, x, v)))donde N es la submáquina correspondiente a la transición. Esto da lugar a una definición recursiva de las funciones FM.
• Si la submáquina es indeterminista, se demuestra de manera análoga utilizando conjuntos de estados en lugar de estados.
![Page 33: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/33.jpg)
Qué funciones son recursivas?
• Todas las calculables
• Es consecuencia de lo anterior
• También es consecuencia de la construcción de una máquina universal que emula máquinas de Turing con submáquinas recursivas
![Page 34: Recursividad](https://reader034.fdocuments.es/reader034/viewer/2022042818/55b35ba1bb61eb09448b474f/html5/thumbnails/34.jpg)
Qué funciones son recursivas?, II
• Las que se obtienen a partir de las recursivas primitivas básicas mediante composición, recursión primitiva y minimización
• Es consecuencia de lo anterior