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 (1 - 6)
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
nikestylex7
post
Post #3





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

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


Już tłumacze. Chodzi o to że każda z tych pętli for to jedno spotkanie z 3 kombinacjami więcej. A w tym skrypcie chciałbym przerobić te staje pętlę for na takie którymi mógłbym operować czyli zmieniać zwiększać je lub zmniejszać. Jest teraz ich 10a chciałbym np 9 to muszę usuwać je z kodu a nie chce tego robić.


adbacz męczę się z Twoim przykładem i dalej nic skrypt praktycznie się nie wyświetla.

Stworzyłem takie coś lecz to nie działa poprawnie.

  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= $spotkanie;
  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. $iterations=0;
  19. function makeThis($iterations, $cliczby, $kupon, $kombinacje)
  20. {
  21. for( $i = 0; $i < $cliczby; $i++ ) {
  22. // jeśli skończyły nam się zagnieżdżenia, to wykonujemy kod przypisania wartości do zmiennej
  23. if($iterations <= 0)
  24. {
  25. if(0 === $licznik%$ilosc_na_kuponie) {
  26. ++$kupon; // to nam stworzy klucze w tablicy, w stylu "kupon_1", "kupon_2" itd
  27. }
  28. ++$licznik;
  29. $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
  30. print $kombinacje;
  31. }
  32. // W innym wypadku wywołujemy samą siebie, zmniejszamy iterację i przesyłamy te wszystkie parametry jeszcze raz
  33. else
  34. {
  35. makeThis(--$iterations, $cliczby, $kupon, $kombinacje);
  36. }
  37. }
  38. }


?
Go to the top of the page
+Quote Post
adbacz
post
Post #4





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

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


Nic nie wyświetla? Włącz proszę raportowanie błędów. Wydaje mi się, że niezbyt dobrze wiesz, jak działają funkcje. Poza tym, gdzie wywołujesz tą funkcję? Jest jej definicja, ale nie ma jej wywołania.

Co to znaczy: "dalej nic skrypt praktycznie się nie wyświetla" - Nie wyświetla nic, czy wyświetla coś?
Go to the top of the page
+Quote Post
nikestylex7
post
Post #5





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

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


Hmm Undefined variable spotkanie on line 132

Wyświetla pusta tablice , a powinny być w niej kupon_1 kupon_2 z kombinacjami

Wypełniłem zmienną spotkanie i błąd znikł lecz dalej nic pusta tablica.
Go to the top of the page
+Quote Post
adbacz
post
Post #6





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

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


Jeśli wywołujesz tą funkcje, to powinieneś zobaczyć teraz masą błedów, a nie pustą tablicę (Array). Włącz proszę raportowanie błędów:

Sprawdź czego tam brakuje w tej funkcji, i wyślij ewentualnie jako jej parametry. Popróbuj, ja Ci tylko dałem szkic, podsunąłem pomysł, nie jestem o tego, by dawać Ci gotowe rozwiązania. Jeśli chcesz być programistą to musisz troszkę pomyśleć. W najgorszym przypadku poczytaj trochę o funkcjach, na jakiej zasadzie działają itd.
Go to the top of the page
+Quote Post
nikestylex7
post
Post #7





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

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


Tak tylko no mówię nie ma błędów chciałbym je widzieć były tylko do tej zmiennej a potem jak zrobiłem to nic ;/

Aktualnie pod tą kombinacje
  1. function makeThis($iterations, $cliczby, $kupon, $kombinacje)
  2.  
  3. {
  4. $liczby = array( '1','X','2' );
  5. $kupon = 0; //specjalnie zaczynam od 0, bo pierwszy cykl od razu nam zamieni zmieną $kupon na 1
  6. $licznik = 0; //to nam będzie się ciagle zmieniać
  7. $wzorzec = 'Kupon ';
  8. $nazwa1= 'Manchester United - Arsenal :';
  9. $nazwa2= 'Manchester United - Arsenal :';
  10. $nazwa3= 'Barcelona - Manchester City :';
  11. $nazwa4= 'AC Milan - Juventus :';
  12. $nazwa5= 'Legia Warszawa - Pogoń Szczecin :';
  13. $nazwa6= 'Pogoń Szczecin - Manchester United :';
  14. $nazwa7= 'Borussia Dortmund - Arsenal :';
  15. $nazwa8= 'Barcelona - Pogoń Szczecin :';
  16. $nazwa9= 'Barcelona - Legia Warszawa :';
  17. $nazwa10= 'Arsenal - Barcelona :';
  18. $kombinacje = array();
  19. $ilosc_na_kuponie=1; //ilość spotkań na kuponie
  20. $cliczby = count( $liczby );
  21. for( $i = 0; $i < $cliczby; $i++ ) {
  22. // jeśli skończyły nam się zagnieżdżenia, to wykonujemy kod przypisania wartości do zmiennej
  23. $iterations=0;
  24. if($iterations <= 0)
  25. {
  26. if(0 === $licznik%$ilosc_na_kuponie) {
  27. ++$kupon; // to nam stworzy klucze w tablicy, w stylu "kupon_1", "kupon_2" itd
  28. }
  29. ++$licznik;
  30. $kombinacje[$wzorzec.$kupon] = '<br />'.$nazwa1.$liczby[$i]; // a to nam utworzy właściwe tablice z kombinacjami kuponów
  31. echo '<pre>';
  32. print_r( array_slice($kombinacje,0,100) );
  33. echo '</pre>';
  34. }
  35. // W innym wypadku wywołujemy samą siebie, zmniejszamy iterację i przesyłamy te wszystkie parametry jeszcze raz
  36. else
  37. {
  38. makeThis(--$iterations, $cliczby, $kupon, $kombinacje);
  39.  
  40. }
  41.  
  42. }
  43.  
  44. }
  45. makeThis($iterations, $cliczby, $kupon, $kombinacje);


Są następujące błędy: :
Notice: Undefined variable: iterations in /home/k/public_html/k.php on line 171

Notice: Undefined variable: cliczby in /home/k/public_html/k.php on line 171

Notice: Undefined variable: kupon in /home/k/public_html/k.php on line 171

Poza tym to skrypt wyświetla kombinacje lecz tak
Array
(
[Kupon 1] =>
Manchester United - Arsenal :1
)
Array
(
[Kupon 1] =>
Manchester United - Arsenal :1
[Kupon 2] =>
Manchester United - Arsenal :X
)
Array
(
[Kupon 1] =>
Manchester United - Arsenal :1
[Kupon 2] =>
Manchester United - Arsenal :X
[Kupon 3] =>
Manchester United - Arsenal :2
)

A powinien tak jak jest ostatnia tablica czyli 3 kupony i to w dodatku jest tylko do jednej petli jednego zdarzenia a gdzie jeszcze do tego 9

?

Ten post edytował nikestylex7 7.01.2013, 04:42:32
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 Aktualny czas: 19.08.2025 - 20:00