SoloCodigo

Programación General => Pascal => Mensaje iniciado por: Lastent en Domingo 3 de Abril de 2005, 04:31

Título: Se Puede Usar Recursividad En Pascal
Publicado por: Lastent en Domingo 3 de Abril de 2005, 04:31
Queria saber si es que se puede usar rercursividad en pascal, porque trate de implementar el factorial de esta forma:

Function Factorial(n: integer):longint;

   var
   i:integer;
       Begin
         for i:=n  downto 0 do
           if i=0 then
           factorial:=1
           else
           factorial:=factorial(n)*i;
       end;

y me salio este mensaje

stack overflow error

espero que me contesten cuanto antes

Gracias
Título: Re: Se Puede Usar Recursividad En Pascal
Publicado por: Blag en Domingo 3 de Abril de 2005, 07:07
La recursividad se puede utilizar en cualquier lenguaje de programación......Por lo menos en los que yo utilizo sí  :comp:

El problema está en que tu estás utilizando mál la recursividad......Lo que se hace es que una función se llame a si misma.......

Citar
Function Factorial(n: integer):longint;

var
i:integer;
Begin
for i:=n downto 0 do
if i=0 then
factorial:=1
else
factorial:=factorial(n)*i;
end;

En este caso, al decir......factorial:=1, estás asignando el valor a una variable que ni siquiera está declarada......tu función, necesita un parámetro......

En este otro......factorial:=factorial(n)*i;, llamas a la función......pero se lo asignas a una variable que no existe.....o en el que caso de que Pascal te lo permita.....les estàs asignando a la función, un valor generado por la misma función  :blink:

Ademàs.....nunca imprimes los valores  :huh:

No tengo el Pascal a la mano....y hace mucho que no lo utilizo....pero debería de ser algo así  :lol:

Código: Text
  1.  
  2. Function Factorial(n: integer):longint;
  3. var
  4. i:integer,i:factorial;
  5. Begin
  6. for i:=n downto 0 do
  7. if i=0 then
  8. factorial(1);
  9. else
  10. factorial:=factorial(n);
  11. factorial:=factorial*i;
  12. write(factorial);
  13. end;
  14.  
  15.  

Saludos,

Blag  :devil:
Título: Re: Se Puede Usar Recursividad En Pascal
Publicado por: grandzam en Domingo 3 de Abril de 2005, 07:13
Un programa recursivo es aquel que se invoca a sí mismo en al menos una de sus instrucciones.

Todo programa recursivo debe tener una condición de finalización. Para probar la corrección de los algoritmos recursivos se utiliza la inducción sobre el tamaño de las instancias.

Por esa razón se te llena la pila, porque lo llamas y en esa otra llamada entra al for, y luego se vuelve a llamar y entra al for, y asi se vuelve infinito... asi ke lo mejor sería:

Código: Text
  1. program factorial_;
  2. uses crt;
  3. var
  4.  n:integer;
  5.  
  6. function factorial(n:integer):longint;
  7. begin
  8.   if n=0 then factorial:=1  {Vez no hay ciclo for...}
  9.     else
  10.        begin
  11.           factorial:=n*factorial(n-1);
  12.        end;
  13. end;
  14.  
  15. begin
  16.     clrscr;
  17.     writeln('N£mero: ');
  18.     readln(n);
  19.     Writeln('Factorial: ',factorial(n));
  20. end.
  21.  

Claro que este código lo hice y lo probé antes de mandarlo, p'ro tienes ke hacerle alguna corrección para que cuándo te dé un numero menor o igual a cero, te diga que solo puede hacerce para numeros positivos...
Título: Re: Se Puede Usar Recursividad En Pascal
Publicado por: Blag en Lunes 4 de Abril de 2005, 03:02
Tienes razón grandzam....No me había dado cuenta del FOR  :lol:

Saludos,

Blag  :hola:
Título: Re: Se Puede Usar Recursividad En Pascal
Publicado por: grandzam en Lunes 4 de Abril de 2005, 23:22
:D  Saludos Blag, leí tu tutorial de C++ esta muy bueno y muy completo, gracias por ponerlo a nuestra disposición