Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tail To Iterative
Tail To Iterative
1
A los fines de describir el procedimiento de transformación del recursivo
a la cola vamos a necesitar las siguientes definiciones:
Sea f la función recursiva a la cola a transformar. Sean:
• T1 el producto cartesiano de los parámetros de f que sufren cambios
entre cada llamada de la recursión.
• T2 el producto cartesiano de los parámetros de f que permanencen
inalterados entre cada llamada recursiva.
• T3 el producto cartesiano de los parámetros devueltos como resultado
de la función f .
• d : T1 × T2 → boolean una función booleana que define la condición de
corte de la recursión.
• s : T1 × T2 → T1 una función que realiza los cambios en los valores de
los parámetros en el cuerpo de la función recursiva.
• h : T1 × T2 → T3 una función que define el resultado de la función f .
Entonces la función recursiva a la cola f : T1 × T2 → T3 queda definida
como:
∀t1 : T1 , t2 : T2 :
h(t1 , t2 ) d(t1 , t2 ) = true
f (t1 , t2 ) =
f (s(t1 , t2 ), t2 ) d(t1 , t2 ) = f alse
Dicha función f puede ser entonces transformada en un programa itera-
tivo de la forma:
while (!d(t1,t2)){
t1 = s(t1,t2);
}
return h(t1,t2);
2
De esta forma la función de queda definida como:
de : N × N → N × N
Para obtener una función recursiva a la cola para este caso necesitamos
de un parámetro adicional que permita acumular el valor del cociente que va
cambiando entre cada llamada de la recursión. Ası́ definimos:
deaux : N × N × N → N × N
de(d, q) = deaux(d, q, 0)
deaux : N × N × N → N × N
• T1 : N × N
• T2 : N
• T3 : N × N
• d(d, q, c) : d < q
• s(d, q, c) : (d − q, c + 1)
• h(d, q, c) : (c, d)
3
deaux(d,q,c)
while (!(d<q)){
d = d-q;
c = c+1;
}
return (c,d);
teniendo en cuenta que el valor de retorno debe ser una estructura que pueda
contener al cociente c y al resto d como resultado.