[ Foro de Pascal ]

Recursividad- Free Pascal

13-Dec-2010 23:56
María franco
2 Respuestas

Hola a todos:
          Necesito su ayuda

He realizado el problema de euclides donde calculo el mcd con restas sucesivas y un lazo While, ahora lo debo reescribir utilizando un procedimiento de recursión y no sé cómo.

Esto es lo que hice, aunque se compila bien, el resultado está mal:

program euclides_recursivo(input, output);
(*Algoritmo de Euclides, usando recursividad*)

var d,a, b: integer;

function mcd( a: integer; b: integer): integer;
begin
if ( a<0 ) then a:=-a;
if ( b<0 ) then b:=-b;

if (a>b) then mcd:=mcd(a-b,b)
end;

begin
    (*CARTEL DE INFORMACION*)
    Writeln('Algoritmo de Euclides para encontrar el');
    Write ('maximo comun divisor entre dos enteros, ');
    WRiteln('mcd(a,b)'); writeln;
    Writeln('Nota: mcd(0,0) definido como 0'); Writeln;

    (*DATOS DE ENTRADA*)
    Write ('Entrar a: ');readln(a);
    Write ('Entrar b: ');readln(b);
    Writeln;

    (*SALIDA*)
    d:=mcd(a,b);
    Writeln ('El maximo comun divisor es:  ',d:2);

    (*FIN*)
    Writeln; Writeln('Fin')
end.
Muchas gracias
Saludos


14-Dec-2010 00:34
Nacho Cabanes (+83)

El algoritmo de Euclides para calcular el Máximo Común Divisor de dos números lo tienes desarrollado en muchas páginas de la red, incluso en la Wikipedia (lo sé de buena tinta, porque lo hice la semana pasada en clase con mis alumnos ;-D ).

Lo que tú has hecho es el procedimiento recursivo, (incompleto, te falta un caso base que permita salir siempre), así que imagino que te has confundido en lo que pides, y te refieres a que ahora quieren que lo hagas iterativo.

Iterativo tampoco es mucho más difícil que lo que ya tienes, porque basta con que guardes (y vayas actualizando) dos valores. Lo dicho, mira en la wikipedia y convierte ese algoritmo a programa en Pascal.

http://es.wikipedia.org/wiki/Algoritmo_de_Euclides#Implementaci.C3.B3n_en_pseudoc.C3.B3digo


14-Dec-2010 23:36
María franco

Hola Nacho:

Gracias, he solucionado colocando despues de los dos if de la función mcd:

if b=0 then mcd:=a
else mcd:=mcd(b,a mod b)
end;

lo cual me permite ejecutarlo bien y salir.

Muchas Gracias.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)