[SOLVED] PHP Factorial Issue

Issue

I am trying to learn PHP and compute the factorial of a number when given a input from a user, but I seem to be stumped. My first and last condition checkout but when I put a number bigger than 2 my result is always false, here is my code:

<!DOCTYPE html>
<html>
  <head>
      <title>Factorial</title>
  </head>
  <body>
    <form action="" method="GET">
        Enter Number: <input type="text" name="num"><br>
        <input type="submit" name ="submit">
    </form>
    Factorial Of Your Number:
    <?php
      function factorial($n){

          if (ctype_digit($n))
          {
              if ($n <= 1)
              {
                  echo "1";
              }
              else
              {
                 echo $n * factorial($n - 1);
              }
          }
          else
          {
            echo "false";
          }
      }
      if(isset($_GET['submit']))
      {
        $s = $_GET["num"];
        factorial($s);
      }
    ?>
  </body>
</html>

I have tried editing many variations of this line echo $n * factorial($n – 1); but all result in false or an error and I can’t seem to crack this. Any ideas? Note that I am trying to keep the php in the internal body not an externalphp file.

Solution

For your recursive function to work, it needs to return a number. Otherwise your function will try to calculate $n * null which throws an error.

function factorial($n){
    if ($n <= 1) {
        return 1;
    } else {
        return $n * factorial($n - 1);
    }
}

if (isset($_GET['submit'])) {
    $n = intval($_GET["num"]);
    echo factorial($n);
}

Answered By – 4castle

Answer Checked By – David Goodson (BugsFixing Volunteer)

Leave a Reply

Your email address will not be published.