Programación General > Pascal

 Se Puede Usar Recursividad En Pascal

(1/1)

Lastent:
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:
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;

--- Fin de la cita ---

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 --- Function Factorial(n: integer):longint;vari:integer,i:factorial;Beginfor i:=n downto 0 doif i=0 thenfactorial(1);elsefactorial:=factorial(n);factorial:=factorial*i;write(factorial);end;  
Saludos,

Blag  :devil:

grandzam:
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 ---program factorial_;uses crt;var n:integer; function factorial(n:integer):longint;begin  if n=0 then factorial:=1  {Vez no hay ciclo for...}    else       begin          factorial:=n*factorial(n-1);       end;end; begin    clrscr;    writeln('N£mero: ');    readln(n);    Writeln('Factorial: ',factorial(n));end. 
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:
Tienes razón grandzam....No me había dado cuenta del FOR  :lol:

Saludos,

Blag  :hola:

grandzam:
:D  Saludos Blag, leí tu tutorial de C++ esta muy bueno y muy completo, gracias por ponerlo a nuestra disposición

Navegación

[0] Índice de Mensajes

Ir a la versión completa