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.

214 Capítulo 10. Introducción a la recursión<br />

Fac(4)<br />

. . . else<br />

Fac:=4*Fac(3)<br />

Fac<br />

24<br />

Fac(3)<br />

. . . else<br />

Fac:=3*Fac(2)<br />

Fac<br />

6<br />

Fac(2)<br />

. . . else<br />

Fac:=2*Fac(1)<br />

Fac<br />

2<br />

Fac(1)<br />

. . . else<br />

Fac:=1*Fac(0)<br />

Fac<br />

1<br />

Figura 10.1. Esquema de llamadas de Fac.<br />

Fac(0)<br />

. . . th<strong>en</strong><br />

Fac:= 1<br />

para que el proceso concluya al alcanzarse éstos. De lo contrario, se produce la<br />

llamada “recursión infinita”. Por ejemplo, si se aplicase la definición de factorial<br />

a un número negativo,<br />

−3 → −4 → −5 → . . .<br />

los cálculos sucesivos nos alejan cada vez más del valor cero, por lo que nunca<br />

dejan de g<strong>en</strong>erarse llamadas.<br />

El proceso de ejecución de un subprograma recursivo consiste <strong>en</strong> una cad<strong>en</strong>a<br />

de g<strong>en</strong>eración de llamadas (susp<strong>en</strong>diéndose los restantes cálculos) y reanudación<br />

de los mismos al término de la ejecución de las llamadas, tal como se recoge <strong>en</strong><br />

la figura 10.1. Para compr<strong>en</strong>der mejor el funcionami<strong>en</strong>to de un subprograma<br />

recursivo, recordemos el proceso de llamada a un subprograma cualquiera:<br />

• Se reserva el espacio <strong>en</strong> memoria necesario para almac<strong>en</strong>ar los parámetros<br />

y los demás objetos locales del subprograma.<br />

• Se recib<strong>en</strong> los parámetros y se cede la ejecución de instrucciones al subprograma,<br />

que comi<strong>en</strong>za a ejecutarse.<br />

• Al terminar éste, se libera el espacio reservado, los id<strong>en</strong>tificadores locales<br />

dejan de t<strong>en</strong>er vig<strong>en</strong>cia y pasa a ejecutarse la instrucción sigui<strong>en</strong>te a la de<br />

llamada.<br />

Fac<br />

1

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

Saved successfully!

Ooh no, something went wrong!