POWRÓT NA STRONĘ SZKOŁY

Funkcje rekurencyjne

Mówiąc najprościej, funkcja rekurencyjna wywołuje samą siebie. Klasycznym, podręcznikowym przykładem jest zastosowanie rekurencji do obliczania silni. Pojęcie silni przypomnij sobie z matematyki. Jej podstawowa definicja jest następująca:

Definicja silni
Rysunek 6_0_0_1. Definicja silni

Jak należy to rozumieć? Jeżeli naszą liczbą jest n, to n! jest iloczynem kolejnych liczb całkowtych k od 1 do n. Tak więc np. 3!=1*2*3=6. Zero silnia wynosi 1.

Druga definicja silni nazywana jest również rekurencyjną:

Rekurencyjna definicja silni
Rysunek 6_0_0_2. Rekurencyjna definicja silni

Wystarczy tę definicję napisać w kodzie PHP.

Ćwiczenie 6_0_0_1. Wykonaj stronę silnia.php na której można będzie obliczyć silnię dowolnej liczby

Liczba musi być całkowita dodatnia, kod takiej strony może wyglądać następująco:

<!doctype html>
<html>
  <head>
    <title>Testowanie skryptów PHP</title>
    <meta charset="utf-8" />
  </head>
  <body>
    <form action="silnia.php" method="post">
      Podaj liczbę <input type="text" name="liczba" />
      <input type="submit" name="oblicz"  value="Oblicz silnię" />
    </form>
    <?php
      function silnia($n)
      {
        if ($n===0) return 1; else return silnia($n-1)*$n;
      }
      
      if (!isset($_POST['oblicz'])) exit;
      $n=$_POST['liczba'];
      
      if (!is_numeric($n)) echo 'Podaj liczbę całkowitą!';
      else if ((float)$n-(int)$n>0) echo 'Podaj liczbę całkowitą!';
      else if ((int)$n<0) echo 'Podaj liczbę dodatnią!';
      else echo 'Silnia liczby '.$n.' wynosi '.silnia((int)$n);
    ?> 
  </body>
</html>

Ustanowiliśmy kilka warunków zaporowych, tak aby użytownik wpisał liczbę całkowitą dodatnią.