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.

18.1. Conceptos básicos 401<br />

begin<br />

if n = 0 th<strong>en</strong><br />

Sumatorio:= 0<br />

else<br />

Sumatorio:= n + Sumatorio(n-1)<br />

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

Al calcular el espacio de memoria que ocupa una llamada a esta función ha de<br />

t<strong>en</strong>erse <strong>en</strong> cu<strong>en</strong>ta que, por su naturaleza recursiva, se g<strong>en</strong>eran nuevas llamadas a<br />

Sumatorio (exactam<strong>en</strong>te n llamadas). En cada llamada se g<strong>en</strong>era una tabla de<br />

activación (véase el apartado 10.2) del tamaño de un <strong>en</strong>tero (el parámetro n), es<br />

decir, de tamaño constante. En consecu<strong>en</strong>cia, podemos afirmar que la función<br />

Sumatorio ti<strong>en</strong>e un coste proporcional a n.<br />

Pero la suma de los n primeros <strong>en</strong>teros puede calcularse también de forma<br />

intuitiva empleando un algoritmo iterativo. Su s<strong>en</strong>cilla implem<strong>en</strong>tación es la<br />

sigui<strong>en</strong>te:<br />

function SumatorioIter(n:<br />

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

{Dev.<br />

integer): integer;<br />

n i=0 i}<br />

var<br />

suma, i:<br />

begin<br />

suma:= 0;<br />

integer;<br />

for i:= 0 to n do<br />

suma:= suma + i;<br />

SumatorioIter:= suma<br />

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

En este caso, una llamada a SumatorioIter, al no g<strong>en</strong>erar otras llamadas<br />

sucesivas, consume un espacio de memoria constante: exactam<strong>en</strong>te el necesario<br />

para su parámetro y para las dos variables locales, todos de tipo integer. Pi<strong>en</strong>se<br />

el lector <strong>en</strong> la difer<strong>en</strong>cia de espacio requerida por ambas funciones para n = 1000,<br />

por ejemplo.<br />

Con estos ejemplos podemos concluir que, a la hora del análisis de algoritmos,<br />

es fundam<strong>en</strong>tal realizar un estudio de la efici<strong>en</strong>cia, destacando como aspecto más<br />

importante la complejidad <strong>en</strong> tiempo, y <strong>en</strong> segundo lugar, la complejidad <strong>en</strong><br />

espacio.<br />

Lo importante es el comportami<strong>en</strong>to asintótico<br />

Es un hecho evid<strong>en</strong>te que datos de un tamaño reducido van a t<strong>en</strong>er asociados,<br />

<strong>en</strong> g<strong>en</strong>eral, tiempos cortos de ejecución. Por eso, es necesario estudiar el com-

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

Saved successfully!

Ooh no, something went wrong!