Tipos de recursión
ESQUEMA GENERAL
{Q()}
función f(x: T1) retorna (y: T2)
caso
Bt(x) -> triv(x)
Bnt(x) -> c(f(s(x)), x)
fcaso
ffunción
{R()}
donde los parámetros formales e han de entenderse como tuplas { } e { } , respectivamente.
TIPOS DE FUNCIONES RECURSIVAS
Según que el elemento sucesor s(
)
sea único o no, pueden presentarse los dos tipos de funciones recursivas siguientes:
Función recursiva lineal o simple: cuando la función recursiva genera A LO SUMO UNA LLAMADA INTERNA por cada llamada externa.
Función recursiva no lineal o múltiple: cuando genera DOS O MÁS LLAMADAS INTERNAS por cada llamada externa.
Nota.- Si aparecieran varias llamadas recursivas, cada una en una alternativa diferente de una instrucción condicional, la recursividad seguiría siendo lineal ya que, en tiempo de ejecución, las alternativas son mutuamente excluyentes y a lo sumo se produciría una invocación.
EJEMPLO DE FUNCIÓN RECURSIVA LINEAL O SIMPLE
Funcion POTENCIA (a:entero, n:entero) retorna (p:entero)
si n = 0 entonces retorna 1
sino retorna POTENCIA(a, n-1) * a
fcaso
ffunción
{}

EJEMPLO DE FUNCIÓN RECURSIVA NO LINEAL O MÚLTIPLE
{}
Funcion POTENCIA3 (a:entero, n:entero) retorna (p:entero)
caso
n = 0 -> 1
n = 1 -> 3
n > 1 -> 2 *POTENCIA3(n-1) + 3 * POTENCIA3(n-1)
fcaso
ffunción
{}

EJEMPLO DE FUNCIÓN RECURSIVA LINEAL O SIMPLE
{}
Funcion Maximo_Comun_Divisor (a,b:entero) retorna (g:entero)
caso
a = b -> a
a > b -> Maximo_Comun_Divisor(a-b, b)
a < b -> Maximo_Comun_Divisor(a, b-a)
fcaso
ffunción
{}

TIPOS DE FUNCIONES RECURSIVAS
Según que el comportamiento de la función c (función de combinación) pueden presentarse los dos tipos de funciones recursivas siguientes:
Función recursiva no final o no de cola: cuando la función c es necesaria, esto es, f(̅) = c(f(s(̅)),)
Función recursiva final o de cola: cuando la función c no es necesaria, esto es, f(̅ ) = f(s())
FUNCIÓN RECURSIVA NO FINAL O NO DE COLA
Cuando la función c SÍ es necesaria
función f(x: T1) retorna (y: T2)
caso
Bt(x) -> triv(x)
Bnt(x) -> , x)
fcaso
ffunción
FUNCIÓN RECURSIVA FINAL O DE COLA
Cuando la función c NO es necesaria
función f(x: T1) retorna (y: T2)
caso
Bt(x) -> triv(x)
Bnt(x) -> f(s(x), x)
fcaso
ffunción
EJEMPLO DE FUNCIÓN RECURSIVA NO FINAL O NO DE COLA
Funcion POTENCIA (a:entero, n:entero) retorna (p:entero)
si n = 0 entonces retorna 1
sino retorna POTENCIA(a, n-1) * a
fcaso
ffunción
{}

EJEMPLO DE FUNCIÓN RECURSIVA FINAL O DE COLA
{}
Funcion Maximo_Comun_Divisor (a,b:entero) retorna (g:entero)
caso
a = b -> a
a > b -> Maximo_Comun_Divisor(a-b, b)
a < b -> Maximo_Comun_Divisor(a, b-a)
fcaso
ffunción
{}

EJEMPLO DE FUNCIÓN RECURSIVA NO FINAL O NO DE COLA
{}
Funcion POTENCIA3 (a:entero, n:entero) retorna (p:entero)
caso
n = 0 -> 1
n = 1 -> 3
n > 1 -> 2 *POTENCIA3(n-1) + 3 * POTENCIA3(n-1)
fcaso
ffunción
{}

Last updated