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); } }