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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

10.2. Conceptos básicos 213<br />

La posibilidad de que la función Fac se llame a sí misma existe, porque <strong>en</strong><br />

<strong>Pascal</strong> el id<strong>en</strong>tificador Fac es válido d<strong>en</strong>tro del bloque de la propia función (véase<br />

el apartado 8.5). Al ejecutarlo sobre el argum<strong>en</strong>to 4, se produce la cad<strong>en</strong>a de<br />

llamadas sucesivas a Fac(4), Fac(3), Fac (2), Fac(1) y a Fac(0), así:<br />

Fac(4) ❀ 4 * Fac(3)<br />

❀ 4 * (3 * Fac (2))<br />

❀ 4 * (3 * (2 * Fac(1)))<br />

❀ 4 * (3 * (2 * (1 * Fac(0))))<br />

❀ ...<br />

y, como Fac(0) = 1, este valor es devuelto a la llamada anterior Fac(1) multiplicándose<br />

1 * Fac(0), que a su vez es devuelto a Fac(2), donde se multiplica<br />

2 * Fac(1) y así sucesivam<strong>en</strong>te, deshaciéndose todas las llamadas anteriores <strong>en</strong><br />

ord<strong>en</strong> inverso: 2<br />

... ❀ 4 * (3 * (2 * (1 * 1)))<br />

❀ 4 * (3 * (2 * 1))<br />

❀ 4 * (3 * 2)<br />

❀ 4 * 6<br />

❀ 24<br />

10.2 Conceptos básicos<br />

En resum<strong>en</strong>, los subprogramas recursivos se caracterizan por la posibilidad<br />

de invocarse a sí mismos.<br />

Debe existir al m<strong>en</strong>os un valor del parámetro sobre el que se hace la recursión,<br />

llamado caso base, que no provoca un nuevo cálculo recursivo, con lo que finaliza<br />

y puede obt<strong>en</strong>erse la solución; <strong>en</strong> el ejemplo del factorial, es el cero. Si este valor<br />

no existe, el cálculo no termina. Los restantes se llaman casos recurr<strong>en</strong>tes, y son<br />

aquéllos para los que sí se produce un nuevo cálculo recursivo; <strong>en</strong> el ejemplo, se<br />

trata de los valores positivos 1, 2, 3. . .<br />

En las sucesivas llamadas recursivas los argum<strong>en</strong>tos deb<strong>en</strong> aproximarse a los<br />

casos base,<br />

n → n − 1 → . . . → 1 → 0<br />

2 La mayoría de los <strong>en</strong>tornos de desarrollo (como Turbo <strong>Pascal</strong>) integran un módulo depurador<br />

que permite observar los valores adoptados por los difer<strong>en</strong>tes parámetros y variables que intervi<strong>en</strong><strong>en</strong><br />

<strong>en</strong> un programa durante su ejecución (véase el apartado C.2.6). Esto es particularm<strong>en</strong>te útil<br />

para la compr<strong>en</strong>sión y el desarrollo de subprogramas recursivos.

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

Saved successfully!

Ooh no, something went wrong!