Factorial: Difference between revisions
Content added Content deleted
(→Iterative: factorial(0) == 1) |
m (→[[Factorial function#ALGOL 68]]: use a more authentic DO OD loop.) |
||
Line 32: | Line 32: | ||
=={{header|ALGOL 68}}== |
=={{header|ALGOL 68}}== |
||
===Iterative=== |
===Iterative=== |
||
PROC factorial = (INT |
PROC factorial = (INT upb n)LONG LONG INT:( |
||
INT |
LONG LONG INT z := 1; |
||
FOR n TO upb n DO z *:= n OD; |
|||
WHILE n>1 DO |
|||
n -:= 1; |
|||
z *:= n |
|||
OD; |
|||
z |
z |
||
) |
); |
||
===Recursive=== |
===Recursive=== |
||
PROC factorial = (INT n)LONG LONG INT: |
PROC factorial = (INT n)LONG LONG INT: |
Revision as of 06:25, 17 August 2008
![Task](http://static.miraheze.org/rosettacodewiki/thumb/b/ba/Rcode-button-task-crushed.png/64px-Rcode-button-task-crushed.png)
You are encouraged to solve this task according to the task description, using any language you may know.
The Factorial Function of a positive integer, n, is defined as the product of the sequence n, n-1, n-2, ...1 and the factorial of zero, 0, is [defined] as being 1.
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 trapping negative n errors is optional.
References
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 upb n)LONG LONG INT:( LONG LONG INT z := 1; FOR n TO upb n DO 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):
if n == 0: return 1 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>