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.

356 Capítulo 17. Estructuras de datos recursivas<br />

De aquí se deduce que, si lista no está vacía, y llamamos Resto(lista) a la<br />

lista sin su primer elem<strong>en</strong>to, t<strong>en</strong>emos:<br />

Longitud (lista) = 1 + Longitud (Resto(lista))<br />

Por lo tanto, <strong>en</strong> resum<strong>en</strong>,<br />

Longitud(lista) =<br />

0 si lista = nil<br />

1 + Longitud (Resto(lista)) <strong>en</strong> otro caso<br />

Finalm<strong>en</strong>te, Resto(lista) se repres<strong>en</strong>ta <strong>en</strong> <strong>Pascal</strong> como lista^.sigui<strong>en</strong>te.<br />

Por lo tanto, la definición recursiva <strong>en</strong> <strong>Pascal</strong> de la función Longitud es la<br />

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

type<br />

natural = 0..MaxInt;<br />

...<br />

function Longitud(lista: tLista): natural;<br />

{Dev. el número de nodos de lista}<br />

begin<br />

if lista = nil th<strong>en</strong><br />

Longitud:= 0<br />

else<br />

Longitud:= 1 + Longitud(lista^.sigui<strong>en</strong>te)<br />

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

El uso de la recursividad subyac<strong>en</strong>te <strong>en</strong> la definición del tipo de datos lista<br />

hace que la definición de esta función sea muy simple y clara, aunque también<br />

es posible y s<strong>en</strong>cilla una versión iterativa, que se deja como ejercicio.<br />

Evaluación de polinomios: La regla de Horner<br />

Supongamos que se plantea escribir un programa para evaluar <strong>en</strong> un punto<br />

dado x un polinomio con coefici<strong>en</strong>tes reales<br />

P (x) = a0x n + a1x n−1 + a2x n−2 + · · · + an−1x + an,<br />

Conocido x, un posible modo de evaluar el polinomio es el sigui<strong>en</strong>te:<br />

Conocido x<br />

Dar valor inicial 0 a valor<br />

para cada i <strong>en</strong>tre 0 y N<br />

Añadir aN−i * x i a valor<br />

Devolver valor

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

Saved successfully!

Ooh no, something went wrong!