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
Ir a la versión completa