Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][PHP]Obliczanie silni rekurencja
Lukis92
post 27.02.2015, 15:12:21
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.07.2012

Ostrzeżenie: (0%)
-----


Witam.
Mam problem z silnią taki, że nie wiem jak zrobić, aby rezultat wyświetlał się w taki sposób:
Wprowadzam w formularzu 5 i wyskakuje taka odpowiedz z serwera:
Cytat
Silnia z liczby 1 wynosi 1
Silnia z liczby 2 wynosi 2
Silnia z liczby 3 wynosi 6
Silnia z liczby 4 wynosi 24
Silnia z liczby 5 wynosi 120


Oto kod:
  1. <!doctype html>
  2. <meta charset="utf-8">
  3. <title>Dokument bez tytułu</title>
  4. </head>
  5.  
  6. <form action="silnia.php" method="post">
  7. <tr>
  8. <td>Podaj liczbę:</td>
  9. <td><input type="text" name="silnia" value="<?php if(isset($_POST['silnia']) && preg_match('/^\d+$/', $_POST['silnia'])){echo $_POST['silnia'];} ?>"/></td>
  10. </tr>
  11. <tr>
  12. <td><input type="submit" value="Wyślij" /></td>
  13. <td><input type="reset" name="Reset" /></td>
  14. </tr>
  15. </table>
  16. </form>
  17. </body>
  18. </html>


  1. <?php
  2. if(isset($_POST['silnia'])){
  3. $liczba = $_POST['silnia'];
  4.  
  5. function silnia($n)
  6. {
  7. if($n >= 2){
  8. echo 'Silnia z liczby '.$n.' wynosi '.($n * silnia($n-1)).'<br />';
  9. }else{
  10. return 1;
  11. }
  12. }
  13.  
  14. echo silnia($liczba);
  15. }
  16. ?>


I u mnie jest taki rezultat:
Cytat
Silnia z liczby 2 wynosi 2
Silnia z liczby 3 wynosi 0
Silnia z liczby 4 wynosi 0
Silnia z liczby 5 wynosi 0


Proszę was o jakieś wskazówki, podpowiedzi jak rozwiązać ten problem. Może nie rozumiem rekurencji. Sam już nie wiem smile.gif
Go to the top of the page
+Quote Post
fklar
post 27.02.2015, 15:19:41
Post #2





Grupa: Zarejestrowani
Postów: 61
Pomógł: 13
Dołączył: 17.12.2011

Ostrzeżenie: (0%)
-----


Twoja funkcja w niektórych przypadkach zwracała liczbę, w pozostałych wyświetlała ciąg znaków. Rozbiłem to na dwie funkcje:

  1. function silnia($n) {
  2. if($n >= 2) return $n * silnia($n-1);
  3. else return 1;
  4. }
  5.  
  6. function wyswietl_silnia($n) {
  7. if($n > 1) wyswietl_silnia($n-1);
  8. echo 'Silnia z liczby '.$n.' wynosi '.silnia($n).'<br />';
  9. }
  10.  
  11. echo wyswietl_silnia(5);


Sprawdź teraz.

Ten post edytował fklar 27.02.2015, 15:20:05


--------------------
fklar.pl
Go to the top of the page
+Quote Post
Lukis92
post 27.02.2015, 16:07:52
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.07.2012

Ostrzeżenie: (0%)
-----


Dzięki wielkie za pomoc smile.gif Teraz działa jak należy. Jeszcze po prostu do końca nie rozumiem funkcjonowania rekurencji.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2025 - 02:27