Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Rekurencja
nikestylex7
post
Post #1





Grupa: Zarejestrowani
Postów: 386
Pomógł: 7
Dołączył: 22.04.2010
Skąd: Ziemia

Ostrzeżenie: (20%)
X----


Witam próbuje i mi nie wychodzi. Wiem że chodzi o wywołanie funkcji przez samą siebie lecz nie wiem nawet czy nie idę w ślepy kąt bo nie wiem czy jest ona w stanie mi pomóc.
oto przykład w którym chciałbym kontrolować ilość kombinacji a mianowicie zmniejszać pętle for na tyle ile chciałbym sobie wybrać.

  1. $liczby = array( '1','X','2' );
  2. $kupon = 0; //specjalnie zaczynam od 0, bo pierwszy cykl od razu nam zamieni zmieną $kupon na 1
  3. $licznik = 0; //to nam będzie się ciagle zmieniać
  4. $wzorzec = 'Kupon ';
  5. $nazwa1= 'Legia Warszawa - Pogoń Szczecin :';
  6. $nazwa2= 'Manchester United - Arsenal :';
  7. $nazwa3= 'Barcelona - Manchester City :';
  8. $nazwa4= 'AC Milan - Juventus :';
  9. $nazwa5= 'Legia Warszawa - Pogoń Szczecin :';
  10. $nazwa6= 'Pogoń Szczecin - Manchester United :';
  11. $nazwa7= 'Borussia Dortmund - Arsenal :';
  12. $nazwa8= 'Barcelona - Pogoń Szczecin :';
  13. $nazwa9= 'Barcelona - Legia Warszawa :';
  14. $nazwa10= 'Arsenal - Barcelona :';
  15. $kombinacje = array();
  16. $ilosc_na_kuponie=1; //ilość spotkań na kuponie
  17. $cliczby = count( $liczby );
  18. for( $j = 0; $j < $cliczby; $j++ ) {
  19. for( $i = 0; $i < $cliczby; $i++ ) {
  20. for( $h = 0; $h < $cliczby; $h++ ) { // CHODZI TUTAJ O TE PĘTLE MOŻE REKURENCJA JEST W STANIE POMÓC
  21. for( $g = 0; $g < $cliczby; $g++ ) {
  22. for( $f = 0; $f < $cliczby; $f++ ) {
  23. for( $e = 0; $e < $cliczby; $e++ ) {
  24. for( $d = 0; $d < $cliczby; $d++ ) {
  25. for( $c = 0; $c < $cliczby; $c++ ) {
  26. for( $b = 0; $b < $cliczby; $b++ ) {
  27. for( $a = 0; $a < $cliczby; $a++ ) {
  28. if(0 === $licznik%$ilosc_na_kuponie) {
  29. ++$kupon; // to nam stworzy klucze w tablicy, w stylu "kupon_1", "kupon_2" itd
  30. }
  31. ++$licznik;
  32. $kombinacje[$wzorzec.$kupon] = '<br />'.$nazwa1.$liczby[$a].'<br />'.$nazwa2.$liczby[$b].'<br />'.$nazwa3.$liczby[$c].'<br />'.$nazwa4.$liczby[$d].'<br />'.$nazwa5.$liczby[$e].'<br />'.$nazwa6.$liczby[$f].'<br />'.$nazwa7.$liczby[$g].'<br />'.$nazwa8.$liczby[$h].'<br />'.$nazwa9.$liczby[$i].'<br />'.$nazwa10.$liczby[$j]; // a to nam utworzy właściwe tablice z kombinacjami kuponów
  33. }
  34. }
  35. }
  36. }
  37. }
  38. }
  39. }
  40. }
  41. }
  42. }
  43.  
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
adbacz
post
Post #2





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


W takim razie zrób funkcję, w której będzie tylko jedna pętla for. Widzę, że każda operuje na tej samej ilości danych ($cliczby) więc nie będzie problemu. Napisze tutaj tylko prototyp, resztę sobie musisz wykoncypować, bo dokładnie nie wiem na co Ci takie coś bo nie podałeś żadnych informacji.

  1. function makeThis($iterations, $cliczby, $kupon, $kombinacje)
  2. {
  3. for( $i = 0; $i < $cliczby; $i++ ) {
  4. // jeśli skończyły nam się zagnieżdżenia, to wykonujemy kod przypisania wartości do zmiennej
  5. if($iterations <= 0)
  6. {
  7. // Tutaj Twój kod z linijki 32
  8. }
  9. // W innym wypadku wywołujemy samą siebie, zmniejszamy iterację i przesyłamy te wszystkie parametry jeszcze raz
  10. else
  11. {
  12. makeThis(--$iterations, $cliczby, $kupon, $kombinacje)
  13. }
  14. }
  15. }


Tych parametrów możesz sobie stworzyć tyle, ile chcesz przesłac danych do tej fukncji. Ale ja, zamiast podawac tyle parametrów, stworzyłbym klasę a w niej te wszystkie parametry jako właściwości, a do tej metody wysłał tylko ilośc iteracji do wykonania ($iterations).

Mam nadzieje, że to Ci pomoże w jakiś sposób. Nie sprawdzałem działa więc nie jestem pewien co do tego skryptu.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 10.10.2025 - 21:01