09.05.2013 Views

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

17.2. Pilas 367<br />

0<br />

1<br />

2<br />

.<br />

n-2<br />

n-1<br />

n<br />

Primer bucle<br />

Caso base<br />

Fac := 1 (= q(x))<br />

Fac := 1 * 1<br />

Fac := 2 * 1 * 1 = 2!<br />

.<br />

.<br />

.<br />

Fac := (n - 2) * Fac = (n - 2)!<br />

Fac := (n - 1) * Fac = (n - 1)!<br />

Fac := n * Fac = n!<br />

Segundo bucle<br />

Figura 17.7. Expresión <strong>en</strong> dos bucles de la función factorial.<br />

function FacIter (num: integer): integer;<br />

{PreC.: num ≥ 0}<br />

{Dev. num!}<br />

var<br />

pilaRec: tPila; {de <strong>en</strong>teros}<br />

n, fac: integer;<br />

begin<br />

n:= num;<br />

CrearPila(pilaRec);<br />

{Primer bucle: acumulación de las llamadas}<br />

for n:= num downto 1 do<br />

Apilar (n, pilaRec);<br />

{Segundo bucle: resolución de las llamadas}<br />

fac:= 1; {Caso base}<br />

while pilaRec nil do begin<br />

fac:= Cima(pilaRec) * fac;<br />

SuprimirDePila(pilaRec)<br />

<strong>en</strong>d; {while}<br />

FacIter:= fac<br />

<strong>en</strong>d; {FacIter}<br />

En la figura 17.7 puede verse gráficam<strong>en</strong>te el significado de los dos bucles que<br />

aparec<strong>en</strong> <strong>en</strong> el programa anterior.<br />

La descomposición anterior de la función factorial no es más que un ejemplo<br />

del caso g<strong>en</strong>eral de transformación de recursión <strong>en</strong> iteración que se expone<br />

seguidam<strong>en</strong>te.<br />

Supongamos que se ti<strong>en</strong>e una función definida recursivam<strong>en</strong>te, de la sigui<strong>en</strong>te<br />

manera:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!