PHP :: Aufgabe #28
4 Lösungen
Fakultät von n berechnen
Anfänger - PHP
von Dome
- 03.01.2013 um 01:39 Uhr
Schreiben Sie ein Programm, oder eine Funktion, die die Fakultät einer beliebigen Zahl berechnet ohne eine vorhandene Funktion aus der Programmbibliothek zu verwenden.
Konsolenausgabe:
Fakultät von n: 10
3628800
Lösungen:
<?php
if(!isset($_POST['n'])){
$_GET['n'] = '';
}
function fakultaet($n){
if($_POST['n'] == ''){
return '';
} else {
$fak = 1;
for($i = 1; $i <= $n; $i++){
$fak *= $i;
}
return $fak;
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Fakultaet</title>
</head>
<body>
<form action="./fakultaet.php" name="fak" method="POST">
<table>
<tr>
<td>Fakultaet von n: </td>
<td><input type="text" name="n" size="2" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="berechnen" /></td>
</tr>
</table>
</form>
<p>
<?php
echo fakultaet($_POST['n']);
?>
</p>
</body>
</html>
Rekursive Variante:
PHP-Code
<?php
function berechne($n){
// fehlerfaelle abfangen
$f_var = filter_var($_POST['n'], FILTER_VALIDATE_INT);
if((!isset($_POST['n'])) || (!$f_var) || ($_POST['n'] < 1)){
return 'Bitte positive Ganzzahl angeben.';
} else {
return fakultaet($n);
}
}
function fakultaet($n){
if($n <= 2){
// abbruchkriterium
return $n;
} else {
// rekursiver aufruf
return $n * fakultaet($n-1);
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Fakultaet</title>
</head>
<body>
<form action="./fakultaet.php" name="fak" method="POST">
<table>
<tr>
<td>Fakultaet von n: </td>
<td><input type="text" name="n" size="2" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="berechnen" /></td>
</tr>
</table>
</form>
<p>
<?php
echo berechne($_POST['n']);
?>
</p>
</body>
</html>
echo 'n = 5 ==> ' . fact(5) . '<br />';
echo 'n = 10 ==> ' . fact(10) . '<br />';
echo 'n = 100 ==> ' . fact(100) . '<br />';
function fact($n)
{
if($n == 1)
{
return $n;
}
return fact($n-1) * $n;
}
$beliebigezahl = 10;
$fakultaetergebnis = 1;
if($beliebigezahl > 0)
{
for($i = 1; $i <= $beliebigezahl; $i++)
{
$fakultaetergebnis *= ($beliebigezahl - $i+1);
}
}
echo ($fakultaetergebnis);