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:
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ą:
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ą.