Funciones recursivasRoberto Moriyón
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(...
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...
Funciones recursivas primitivas:Funciones básicas• Las funciones recursivas básicas numéricasson:– Sucesor: s(x) = x+1– An...
Funciones recursivas primitivas• Se pueden definir a partir de las básicasmediante recursión primitiva ycomposición• Ejemp...
Composición• En general, si f(x1,…,xn), g1(y1,…,ym),…, gn(y1,…,ym) son funciones, diremos que lafunciónh(y1,…,ym) = f(g1(y...
Totalidad y computabilidad de lasfunciones recursivas primitivas• Si f es RP, es total• La función prev: N - { 0 } → N def...
EJERCICIOS: Demostrar que lassiguientes funciones son RP• [RPN1] fk(x) = k• [RPN2] suma(x, y)• [RPN3] restap(x, y) // Da 0...
EJERCICIOS: Demostrar que lassiguientes funciones son RP• [RPN12] cocientedefecto(x, 2)• [RPN13] cocientedefectop(x, y) //...
Funciones recursivas primitivassobre cadenas de caracteres• Las funciones recursivas básicas sobre cadenasde caracteres so...
Funciones recursivas primitivas sobrecadenas de caracteres, II• Una recursión primitiva sobre cadenas estáformada por |Σ|+...
Funciones recursivas primitivassobre cadenas de caracteres, III• La función resto: Σ+→ Σ*que elimina elprimer carácter no ...
EJERCICIOS: Demostrar que lassiguientes funciones son RP• [RPC1] fv(w) = v• [RPC2] start(v) // start(“ab”)=“a”, start(0) =...
EJERCICIOS: Demostrar que lassiguientes funciones son RP• [RPC9] iguales(v, w)• [RPC10] contiene(v, w)// contiene(“abcba”,...
Funciones recursivas primitivas: Sumarecursiva• Suponemos que f(n) es recursiva primitiva• g(m) = f(0) + f(1) + … + f(m)– ...
Ejercicios• Suponemos que f(m) es recursiva primitiva.Demostrar que las siguientes funcionestambién lo son: [RPA1], [RPA2]...
Totalidad y computabilidad de lafunció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•...
Formas de definición de lasfunciones recursivas• Definición usual: Aplicar la definiciónrepetidamente, utilizando una pila...
Formas de definición de lasfunciones recursivas, II• Forma rigurosa (aunque teórica):• Definir F sobre un primer dominio, ...
Formas de definición de lasfunciones recursivas, III• Interpretación de la forma anterior: puntofijo de un operador– P(f)(...
EJERCICIOS• [REC 1] Calcular el dominio y los valores delas imágenes de las funciones f y g definidasmediante– f(x,y) = 2....
Funciones recursivas:Minimización• Si f(x,y) es una función recursiva, entoncesg(x) = min { y | f(x,y) ≠ 0 }define otra fu...
EJERCICIOS• Suponiendo que la función f(x,y) searecursiva, demostrar que también lo es lafunción g(x) cuyo valor es la sum...
Ejemplo de funciones recursivas:Máquinas de Turing• Dada una máquina de Turing deterministaM, la función transita(x, y), d...
Ejemplo de funciones recursivas:Máquinas de Turing, II• Demostración:transita(x, y) = esEstado(x) & esEstado(y) && ((x=y) ...
Ejemplo de funciones recursivas:Máquinas de Turing, III• Dada una máquina de Turing deterministaM, la función ejecuta(x, y...
Ejemplo de funciones recursivas:Máquinas de Turing, IV• Dada una máquina de Turing determinista M, lafunción produce(x), q...
Forma normal de funcionesrecursivas• Todas las funciones recursivas se puedenescribir en la formaf(x) = p(miny(q(x, y)))do...
Forma normal: programas• La construcción anterior también sepuede hacer con programas en lugar demáquinas de Turing: a par...
Forma normal: programas, II• El cálculo del programa inicial se puederealizar buscando el valor mínimo delcontador del pro...
Ejemplo de funciones recursivas:Máquinas de Turing, V• Si una máquina de Turing tiene una definiciónmediante submáquinas q...
Ejemplo de funciones recursivas:Máquinas de Turing, VI• La demostración de la afirmación anterior sebasa en la función FM(...
Qué funciones son recursivas?• Todas las calculables• Es consecuencia de lo anterior• También es consecuencia de laconstru...
Qué funciones son recursivas?,II• Las que se obtienen a partir de lasrecursivas primitivas básicas mediantecomposición, re...
Upcoming SlideShare
Loading in …5
×

Recursividad

286 views

Published on

  • Be the first to comment

  • Be the first to like this

Recursividad

  1. 1. Funciones recursivasRoberto Moriyón
  2. 2. 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…
  3. 3. 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
  4. 4. Funciones recursivas primitivas:Funciones básicas• Las funciones recursivas básicas numéricasson:– Sucesor: s(x) = x+1– Anulación: n(x) = (x=0) ? 1 : 0– Proyecciones: uin(x1, …, xn) = xi
  5. 5. Funciones recursivas primitivas• Se pueden definir a partir de las básicasmediante recursión primitiva ycomposición• Ejemplos:– F(x) = s(s(x))– G(x+1, y) = F(G(x, y))G(0,y) = F(y)
  6. 6. Composición• En general, si f(x1,…,xn), g1(y1,…,ym),…, gn(y1,…,ym) son funciones, diremos que lafunciónh(y1,…,ym) = f(g1(y1,…,ym),…,gn(y1,…,ym))se obtiene a partir de ellas mediantecomposición.• En realidad corresponde a la composiciónde G con f, donde G es la función vectorialcon coordenadas g1, …, gn.
  7. 7. Totalidad y computabilidad de lasfunciones recursivas primitivas• Si f es RP, es total• La función prev: N - { 0 } → N definida medianteprev(x+1) = xno es total (y tampoco RP)• Las funciones RP son computables, pues tantof(x)=y como f(x)≠y se pueden determinaralgorítmicamente en tiempo finito.
  8. 8. EJERCICIOS: Demostrar que lassiguientes 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
  9. 9. EJERCICIOS: Demostrar que lassiguientes 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)
  10. 10. Funciones recursivas primitivassobre cadenas de caracteres• Las funciones recursivas básicas sobre cadenasde caracteres son:– Anteposición: sσ(x). Ejemplo: sa(“abc”)=“aabc”– Vacuidad: vσ(x) = (x=λ) ? σ : λ– Proyecciones uin(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))
  11. 11. Funciones recursivas primitivas sobrecadenas 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 recursivasprimitivas.• Las funciones recursivas primitivas sobrecadenas también son totales ycomputables
  12. 12. Funciones recursivas primitivassobre cadenas de caracteres, III• La función resto: Σ+→ Σ*que elimina elprimer carácter no es total ni, por lo tanto,recursiva primitiva
  13. 13. EJERCICIOS: Demostrar que lassiguientes 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)
  14. 14. EJERCICIOS: Demostrar que lassiguientes 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”
  15. 15. Funciones recursivas primitivas: Sumarecursiva• 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)dondeh(x,y) = suma(x,f(s(y))es primitiva recursiva, luego g también lo es.
  16. 16. Ejercicios• Suponemos que f(m) es recursiva primitiva.Demostrar que las siguientes funcionestambié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 ∃m≤x, f(m)=0, y g(x) = 0 en casocontrario– g(x) = 1 si ∀m≤x, f(m)=0, y g(x) = 0 en casocontrario
  17. 17. Totalidad y computabilidad de lafunció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ónde la sucesión f0(x)=x+1, fj+1(x)=fj(fj(…(fj(0)…))– Las funciones R.P. crecen como alguna de lasfunciones anteriores
  18. 18. Formas de definición de lasfunciones recursivas• Definición usual: Aplicar la definiciónrepetidamente, utilizando una pila decálculos parciales, hasta que se llegue alresultado• Ejemplo: Para la función de Ackerman,F(1,1) = F(0,F(1,0)) = F(0,F(0,0)) = F(0,1)= 2
  19. 19. Formas de definición de lasfunciones 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 sucá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
  20. 20. Formas de definición de lasfunciones recursivas, III• Interpretación de la forma anterior: puntofijo 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
  21. 21. EJERCICIOS• [REC 1] Calcular el dominio y los valores delas imágenes de las funciones f y g definidasmediante– 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 delas imágenes de la función h definidamedianteh(x, y) = (x = 0) ? 1 : h(x – 1, h(|x – y|, y))
  22. 22. Funciones recursivas:Minimización• Si f(x,y) es una función recursiva, entoncesg(x) = min { y | f(x,y) ≠ 0 }define otra función recursiva– Demostración: Definimosgaux(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)
  23. 23. EJERCICIOS• Suponiendo que la función f(x,y) searecursiva, demostrar que también lo es lafunción g(x) cuyo valor es la suma f(x,0) +f(x,1) + … + f(x,n) donde n se elije demanera que los sumandos seandiferentes de 0 y f(x,n+1)=0.
  24. 24. Ejemplo de funciones recursivas:Máquinas de Turing• Dada una máquina de Turing deterministaM, la función transita(x, y), donde x e y sonestados instantáneos de ejecución de M,que vale “a” si la máquina M lleva la cintadel estado x al y y ↑ en caso contrario, esrecursiva (pero no recursiva primitiva)
  25. 25. 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 deaplicar una regla de transición de M a partir delestado de ejecución x; si no se puede, devuelve x.• EJERCICIO: [MT REC] Demostrar que lasfunciones esEstado(x) y aplicaRegla(x) sonrecursivas primitivas.
  26. 26. Ejemplo de funciones recursivas:Máquinas de Turing, III• Dada una máquina de Turing deterministaM, la función ejecuta(x, y), donde x, y∈Σ*,que devuelve el estado instantáneo deejecució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))
  27. 27. Ejemplo de funciones recursivas:Máquinas de Turing, IV• Dada una máquina de Turing determinista M, lafunción produce(x), que a cada cadena x le hacecorresponder el contenido de la cinta cuando Mse para a partir de x es recursiva (pero puedeno ser recursiva primitiva)• Demostración:produce(x) =quitaEstado(ejecuta(x,miny(para(ejecuta(x, y)))))• Observación: miny se puede definir en este casode forma análoga a como se hace con números.
  28. 28. Forma normal de funcionesrecursivas• Todas las funciones recursivas se puedenescribir en la formaf(x) = p(miny(q(x, y)))donde p y q son funciones recursivasprimitivas.• Las funciones p y q se pueden elegir demanera que p simplemente elimine elcontenido de la cinta previo a unseparador.
  29. 29. Forma normal: programas• La construcción anterior también sepuede hacer con programas en lugar demáquinas de Turing: a partir de cualquierprograma podemos construir otroequivalente que incorpora un contador yemula al primero paso a paso y cuando elinicial se para sigue ejecutándose sinhacer nada y guardando en una variablebooleana fin la información de que elprograma emulado ha terminado.
  30. 30. Forma normal: programas, II• El cálculo del programa inicial se puederealizar buscando el valor mínimo delcontador del programa emulador para elcual la variable fin es cierto, y devolviendola variable que contiene el valor delprograma emulado.
  31. 31. Ejemplo de funciones recursivas:Máquinas de Turing, V• Si una máquina de Turing tiene una definiciónmediante submáquinas que es recursiva, lafunción que define sobre cadenas de caractereses recursiva.• Como consecuencia de lo anterior, lasmáquinas de Turing definidas recursivamentemediante submáquinas no proporcionan unmecanismo de computación más potente quelas máquinas de Turing simples.
  32. 32. Ejemplo de funciones recursivas:Máquinas de Turing, VI• La demostración de la afirmación anterior sebasa en la función FM(q, u, x, v), que da el estadofinal de ejecución (q’, u’, x’, v’) calculado por lamáquina a partir del estado q con la palabra uxvsobre la cinta, apuntando a la x. Su definición esFM(q, u, x, v) = FM(q’, Π234(FN(q, u, x, v)))donde N es la submáquina correspondiente a latransición. Esto da lugar a una definiciónrecursiva de las funciones FM.• Si la submáquina es indeterminista, sedemuestra de manera análoga utilizandoconjuntos de estados en lugar de estados.
  33. 33. Qué funciones son recursivas?• Todas las calculables• Es consecuencia de lo anterior• También es consecuencia de laconstrucción de una máquina universalque emula máquinas de Turing consubmáquinas recursivas
  34. 34. Qué funciones son recursivas?,II• Las que se obtienen a partir de lasrecursivas primitivas básicas mediantecomposición, recursión primitiva yminimización• Es consecuencia de lo anterior

×