PHP :: Aufgabe #191
4 Lösungen
Rekursieve Fakultät von n
Fortgeschrittener - PHP
von FHEM
- 22.07.2018 um 19:09 Uhr
Erstelle ein programm das n! = 120 zum beispiel nach n auflöst.
Ansatz: 5! =5*4*3*2*1 also müsste n=120/5/4/3/2/1
Ansatz: 5! =5*4*3*2*1 also müsste n=120/5/4/3/2/1
Lösungen:
<?php
const template = <<<'Template'
<form action="#" method="post">
<input type="number" name="Zahl">
<button type="submit">Abschicken</button>
</form>
<br>
Template;
echo template;
if (isset($_POST['Zahl']))
{
$eingabe = intval($_POST['Zahl']);
}
else
{
$eingabe = 120;
}
$finished = false;
$i = 0;
$fak = 1;
$erg = false;
while ($finished === false)
{
$i++;
$fak *= $i;
if ($eingabe === $fak)
{
$finished = true;
$erg = true;
}
else if ($eingabe <= $fak)
{
$finished = true;
}
}
if ($erg === true)
{
echo $eingabe . ' = !' . $i;
}
else
{
echo $eingabe . ' hat keine Fakultät.';
}
<?php
//Lösung 1: Liefert nächstes Fakultätsergebnis nach eingegebenem
$number = 120;
$zahl = 1;
$bool = true;
echo "Lösung 1:<br><br>";
while($bool)
{
if(faku($zahl) == $number)
{
$bool = false;
echo "Die gesuchte Zahl ist " . $zahl;
}
if(faku($zahl) != $number)
{
$zahl += 1;
faku($zahl);
}
if(faku($zahl) > $number)
{
echo faku($zahl) . " (" . $zahl . "!) ist das nächste gültige Fakultätsergebnis nach " . $number;
$bool = false;
}
}
function faku($int)
{
$erg;
if($int == 1)
{
$erg = 1;
}
else
{
$erg = $int * faku($int-1);
}
return $erg;
}
//Lösung 2: Lösung mit Array, Bei ungültiger Eingabe muss neu eingegeben werden!
echo "<br><br><br>Lösung 2:<br><br>";
$array = array();
for($i = 1; $i <= 99; $i++)
{
$array[$i] = faku($i);
}
if(in_array($number, $array))
{
echo "Die gesuchte Zahl ist " . array_search($number, $array);
}
else
{
echo "Bitte gültiges Fakultätsergebnis eingeben!";
}
?><?php
$n = 720;
$p = $n;
$i = 1;
$geloest = FALSE;
while ($geloest == FALSE)
{
if ($n == 0)
{
$geloest = TRUE;
echo "0! ergibt 1";
}
if ($n < 1 && $geloest == FALSE)
{
$geloest = TRUE;
echo "für ".$p." gibt es keine ganzzahlige Fakultät!";
}
else
{
$n = $n/$i;
if ($n == 1)
{
$geloest = TRUE;
echo $i."! ergibt ".$p;
}
$i++;
}
}
?><?php
(int)$i = 1;
(int)$number = 3;
function factorial(float $val) : float {
return $val == 1 ? 1 : $val * factorial($val-1);
}
function calcMethod(float $val) : string {
return $val == 1 ? 1 : $val . ' * ' . calcMethod($val-1);
}
while(true) {
if (factorial($i) == $number) {
echo 'The number you are looking for is ' . (string)$i . ' (' . (string)calcMethod($i) . ')';
break;
} else if (factorial($i) > $number) {
echo 'The next valid factorial result after ' . (string)$number . ' is ' . (string)factorial($i) . ' (' . (string)calcMethod($i) . ')';
break;
} else {
$i++;
factorial($i);
}
}