• Viernes 29 de Marzo de 2024, 05:52

Autor Tema:  Se Puede Usar Recursividad En Pascal  (Leído 2137 veces)

Lastent

  • Nuevo Miembro
  • *
  • Mensajes: 21
    • Ver Perfil
Se Puede Usar Recursividad En Pascal
« en: Domingo 3 de Abril de 2005, 04:31 »
0
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

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Re: Se Puede Usar Recursividad En Pascal
« Respuesta #1 en: Domingo 3 de Abril de 2005, 07:07 »
0
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:

grandzam

  • Miembro MUY activo
  • ***
  • Mensajes: 118
    • Ver Perfil
Re: Se Puede Usar Recursividad En Pascal
« Respuesta #2 en: Domingo 3 de Abril de 2005, 07:13 »
0
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...

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Re: Se Puede Usar Recursividad En Pascal
« Respuesta #3 en: Lunes 4 de Abril de 2005, 03:02 »
0
Tienes razón grandzam....No me había dado cuenta del FOR  :lol:

Saludos,

Blag  :hola:

grandzam

  • Miembro MUY activo
  • ***
  • Mensajes: 118
    • Ver Perfil
Re: Se Puede Usar Recursividad En Pascal
« Respuesta #4 en: Lunes 4 de Abril de 2005, 23:22 »
0
:D  Saludos Blag, leí tu tutorial de C++ esta muy bueno y muy completo, gracias por ponerlo a nuestra disposición