Como se puede resolver el siguiente problema:
El factorial de un n ́mero n entero positivo se define recursivamente
n = 0: n! = 1
n = 1: n! = 1
n > 1: n × (n − 1)!
Diseñe un algoritmo con un solo bucle que resuelva el siguiente problema
n, fact: entero
{Pre ≡ n = N ∧ N > 0}
factorial
{Post ≡ f act = N !}
Siendo el invariante del bucle el predicado siguiente
(i-1)!n!
Inv ≡ fact=------------- ∧ i≤j+1 ∧ n=N
j!
El n ́mero de iteraciones del bucle no debe superar n div 2 + 1.
Da una funcion de cota.
Los pasos que sigon son:
1- Buscar la condicion de continuacion (INV ^ NOT(B) = POST)
B = ?
me sale que si i<>1 y j<>0 se cumple
2-inicializar:
fact = 1
n lo tienes que leer del teclado.
j = n
i = 1
pero asi (i-1)! no sierve para nada.
3-Avanzar:
j := j - 1
porque j = n y tiene que acabar en 0
pero asi el numero de iteraciones creo que no sera n div 2 +1
4- Restablezer:
Las operaciones que hay que realizar para que fact = N!
Alguna idea o algo?
GRACIAS.