Objective
Create a factorial()
function to compute the factorial of a given integer.
Description
The factorial of an integer ::n:: is the product of all integers starting from that integer all the way down to ::1::.
In terms of a function, it could be expressed as follows:
For instance:
::1! = 1::
::2! = 2 \times 1 = 2::
::3! = 3 \times 2 \times 1 = 6::
::4! = 4 \times 3 \times 2 \times 1 = 24::
::5! = 5 \times 4 \times 3 \times 2 \times 1 = 120::
::0!:: is a special case — it evaluates to ::1::.
In this exercise, you have to create a function factorial()
that takes in an integer and returns its factorial.
The function MUST compute the factorial iteratively i.e. using a for
(or maybe while
) loop. In addition to this, if the given argument to factorial()
is not an integer, the function should return the string 'Undefined'
.
Shown below are a couple of examples of the function's usage:
<?php
echo factorial(10), "\n";
echo factorial(5), "\n";
echo factorial(2), "\n";
echo factorial(0), "\n";
echo factorial('0'), "\n";
New file
Inside the directory you created for this course on PHP, create a new folder called Exercise-6-Iterative-Factorial and put the .php solution files for this exercise within it.
Solution
To start with, let's decide exactly what we need in order to implement the factorial()
function:
- First of all, we need to have single parameter that represents the number whose factorial to compute. Let's call this parameter
$n
. - Secondly, we'll have to use the
is_int()
function to check whether the passed-in argument is an integer. - We'll also need to lay out an
if
conditional to check for the case when$n
is0
(i.e ::0!::) and return1
in that case. - Lastly, we'll need a
for
loop to iterate as many times as the integer$n
and compute the factorial of$n
.
And well, this is it.
All this is implemented in the code below:
<?php
function factorial($n) {
if (!is_int($n)) {
return 'Undefined';
}
if ($n == 0) {
return 1;
}
$result = 1;
for ($a = 2; $a <= $n; $a++) {
$result *= $a;
}
return $result;
}
If !is_int($n)
returns true
, that means that is_int()
returned false
, which in turn means that the given argument was not an integer, and hence we return 'Undefined'
.
Moving on, if $n
is 0
, we return 1
directly.
Finally, if none of these conditions is met, we continue with our factorial computing loop. The for
loop iterates $a
from 2
up to, and including, the integer $n
, and in each iteration multiplies $result
with $a
.
Finally, we return the computed $result
.
And this completes our exercise.