Factorial

From Rosetta Code
Revision as of 06:20, 17 August 2008 by rosettacode>NevilleDNZ (→‎[[Factorial function#ALGOL 68]]: reorder and minor optimisation)
Task
Factorial
You are encouraged to solve this task according to the task description, using any language you may know.

The Factorial Function is the product of a sequence n, n-1, n-2...1 starting at the input number to the function.

Write a function to return the factorial of a number. Solutions can be iterative or recursive (though recursive solutions are generally considered too slow and are mostly used as an exercise in recursion). Support for negative n errors is optional.

References

Wikipedia

Ada

Iterative

<Ada> function Factorial (N : Positive) return Positive is

  Result : Positive := N;
  Counter : Natural := N - 1;

begin

  for I in reverse 1..Counter loop
     Result := Result * I;
  end loop;
  return Result;

end Factorial; </Ada>

Recursive

<Ada> function Factorial(N : Positive) return Positive is

  Result : Positive := 1;

begin

  if N > 1 then
     Result := N * Factorial(N - 1);
  end if;
  return Result;

end Factorial; </Ada>

ALGOL 68

Iterative

PROC factorial = (INT in n)LONG LONG INT:(
  INT n := in n;
  LONG LONG INT z := n;
  WHILE n>1 DO
    n -:= 1;
    z *:= n
  OD;
  z
)

Recursive

PROC factorial = (INT n)LONG LONG INT:
  CASE n+1 IN
    1,1,2,6,24,120,720 # a brief lookup #
  OUT
    n*factorial(n-1)
  ESAC
;

Python

Iterative

<python>def factorial(n):

   z=n
   while n>1:
       n=n-1
       z=z*n
   return z

</python>

Recursive

<python>def factorial(n):

   z=1
   if n>1:
       z=n*factorial(n-1)
   return z

</python>