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.

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

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

begin {Equilibrado}<br />

repeat<br />

Read(c);<br />

case c of<br />

’(’: if not EoLn th<strong>en</strong><br />

CierraPar {Se int<strong>en</strong>ta equilibrar el paréntesis}<br />

else<br />

{La <strong>en</strong>trada acaba <strong>en</strong> ‘(‘}<br />

WriteLn(’error: se queda un paréntesis abierto’);<br />

’)’: WriteLn(’error: paréntesis cerrado incorrectam<strong>en</strong>te’);<br />

’[’: if not EoLn th<strong>en</strong><br />

CierraCorchete {Se int<strong>en</strong>ta equilibrar el corchete}<br />

else<br />

{La <strong>en</strong>trada acaba <strong>en</strong> ‘{‘ }<br />

’]’: WriteLn(’error: se queda un corchete abierto’)<br />

<strong>en</strong>d {case}<br />

until EoLn<br />

<strong>en</strong>d. {Equilibrado}<br />

10.6 Recursión e iteración<br />

Si un subprograma se llama a sí mismo se repite su ejecución un cierto número<br />

de veces. Por este motivo, la recursión es una forma especial de iteración y, de<br />

hecho, cualquier proceso recursivo puede expresarse de forma iterativa, con más<br />

o m<strong>en</strong>os esfuerzo, y viceversa. Un ejemplo de ello es el cálculo del factorial<br />

(véanse los apartados 8.2.1 y 10.1).<br />

Sabi<strong>en</strong>do que un determinado problema puede resolverse de las dos maneras,<br />

¿cuándo se debe usar una u otra? Como norma g<strong>en</strong>eral, debe adoptarse siempre<br />

(al m<strong>en</strong>os <strong>en</strong> un primer mom<strong>en</strong>to) la solución que resulte más natural, conc<strong>en</strong>trando<br />

los esfuerzos <strong>en</strong> la corrección del algoritmo desarrollado. Por ejemplo, los<br />

problemas que vi<strong>en</strong><strong>en</strong> descritos <strong>en</strong> forma recurr<strong>en</strong>te se prestan más fácilm<strong>en</strong>te a<br />

una solución recursiva. Un ejemplo es el problema de las torres de Hanoi, cuya<br />

versión iterativa es bastante más complicada que la recursiva.<br />

Por otra parte el mecanismo de la recursión produce, además de la iteración,<br />

la creación automática de nuevos parámetros y objetos locales <strong>en</strong> cada llamada<br />

(apilándose éstos). Por consigui<strong>en</strong>te, se ti<strong>en</strong>e un gasto adicional de memoria (el<br />

de la pila recursiva, para almac<strong>en</strong>ar las sucesivas tablas de activación), además<br />

del tiempo necesario para realizar esas gestiones. Todo esto puede hacer que<br />

ciertos programas recursivos sean m<strong>en</strong>os efici<strong>en</strong>tes que sus equival<strong>en</strong>tes iterativos.

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

Saved successfully!

Ooh no, something went wrong!