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.

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

⎧<br />

⎧<br />

⎨ Mover 1 disco de A a B<br />

Pasar dos de A a C = Mover 1 disco de A a C<br />

⎩<br />

⎪⎨<br />

Mover 1 disco de B a C<br />

Pasar 3 discos de A a B = Mover un disco de A a B<br />

⎧<br />

⎨ Mover 1 disco de C a A<br />

⎪⎩<br />

Pasar dos de C a B = Mover 1 disco de C a B<br />

⎩<br />

Mover 1 disco de A a B<br />

En g<strong>en</strong>eral, Pasar n discos de A a B (si<strong>en</strong>do n ≥ 1), consiste <strong>en</strong> efectuar las<br />

sigui<strong>en</strong>tes operaciones,<br />

⎧<br />

⎨ Pasar n−1 discos de A a C<br />

Pasar n discos de A a B = Mover 1 disco de A a B<br />

⎩<br />

Pasar n−1 discos de C a B<br />

si<strong>en</strong>do 1 el caso base, que consiste <strong>en</strong> mover simplem<strong>en</strong>te un disco sin g<strong>en</strong>erar<br />

llamada recursiva. Ahora apreciamos claram<strong>en</strong>te la naturaleza recursiva del<br />

proceso, pues para pasar n discos es preciso pasar n-1 discos (dos veces), para<br />

n-1 habrá que pasar n-2 (también dos veces) y así sucesivam<strong>en</strong>te.<br />

Podemos escribir un procedimi<strong>en</strong>to para desplazar n discos directam<strong>en</strong>te:<br />

procedure PasarDiscos(n: integer; inicial, final, auxiliar: char);<br />

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

{Efecto: se pasan n discos de la aguja inicial a la final}<br />

begin<br />

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

PasarDiscos (n - 1,inicial, auxiliar, final);<br />

WriteLn(’mover el disco ’, n:3, ’ desde ’, inicial, ’ a ’, final);<br />

PasarDiscos (n - 1,auxiliar, final, inicial)<br />

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

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

Como ejemplo de funcionami<strong>en</strong>to, la llamada PasarDiscos(4, ’A’, ’B’,<br />

’C’) produce la sigui<strong>en</strong>te salida: 5<br />

Cuántos discos: 4 mover disco 4 desde A a B<br />

mover disco 1 desde A a C mover disco 1 desde C a B<br />

mover disco 2 desde A a B mover disco 2 desde C a A<br />

mover disco 1 desde C a B mover disco 1 desde B a A<br />

mover disco 3 desde A a C mover disco 3 desde C a B<br />

mover disco 1 desde B a A mover disco 1 desde A a C<br />

mover disco 2 desde B a C mover disco 2 desde A a B<br />

mover disco 1 desde A a C mover disco 1 desde C a B<br />

5 Como puede apreciarse los números de los discos indican su tamaño.

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

Saved successfully!

Ooh no, something went wrong!