Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - Permutazioni
Forum - PHP - Permutazioni

Avatar
giocala88 (Normal User)
Expert


Messaggi: 243
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 17:06
Giovedì, 24/08/2017
Ciao ragazzi,
ho implementato questo stralcio di codice che dati due numeri $m, $n mi restituisce le possibili combinazioni per cui scomponendo n nelle sue cifre da 1 a n e sommandoli tra loro (combinandoli) mi danno $m. Ad esempio:

$m = 5; $n = 3;

Le permutazioni saranno:
1+1+1+1+1
1+1+1+2
1+2+2
1+1+3
2+3

Codice sorgente - presumibilmente Php

  1. function algo_p($number, $n, $d)
  2. {
  3.     if($number === 0 )
  4.     {
  5.         echo $d;      
  6.     }        
  7.     else
  8.     {
  9.         if($n > 1)
  10.         {
  11.             algo_p($number, $n-1, $d);
  12.         }
  13.         if($n <= $number)
  14.         {
  15.             algo_p($number-$n, $n, $n . " " . $d);            
  16.         }
  17.     }
  18.  
  19.    
  20. }
  21.  
  22. algo_p( $number = 5, $n = 3, ',');



Il codice funziona alla grande se non fosse che vorrei che la funzione mi restituisse un array di elementi e non una stampa di stringa.
Come posso fare?

Grazie



PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 401
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 17:26
Giovedì, 24/08/2017
Invece di stamparlo ritorna l'elemento in un array da un elemento, nelle chiamate ricorsive aggiungi l'array che ricevi ad un array che poi ritornerai.

PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 243
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 11:01
Venerdì, 25/08/2017
Intendi una cosa del genere?

Codice sorgente - presumibilmente Php

  1. function algo_p($number, $n, $d)
  2. {
  3.     if($number === 0 )
  4.     {
  5.         $array[] = $d;  
  6.         return $array;    
  7.     }        
  8.     else
  9.     {
  10.         if($n > 1)
  11.         {
  12.             $array[] = algo_p($number, $n-1, $d);
  13.         }
  14.         if($n <= $number)
  15.         {
  16.             $array[] = algo_p($number-$n, $n, $n . " " . $d);            
  17.         }
  18.     }
  19.  
  20.    
  21. }



Non stampa nulla 8-|

PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 401
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 11:30
Venerdì, 25/08/2017
Più o meno (non ricordo il php, sei sicuro che così crei un array nel modo corretto?)
Manca un return alla fine della funzione, per il caso ricorsivo.

PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 243
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 11:36
Venerdì, 25/08/2017
Ho modificato il codice ritornando l'array e l'output è una cosa del genere:

Codice sorgente - presumibilmente Delphi

  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [0] => Array
  6.                 (
  7.                     [0] => Array
  8.                         (
  9.                             [0] => Array
  10.                                 (
  11.                                     [0] => Array
  12.                                         (
  13.                                             [0] => Array
  14.                                                 (
  15.                                                     [0] => Array
  16.                                                         (
  17.                                                             [0] => 1 1 1 1 1 ,
  18.                                                         )
  19.  
  20.                                                 )
  21.  
  22.                                         )
  23.  
  24.                                 )
  25.  
  26.                         )
  27.  
  28.                 )
  29.  
  30.             [1] => Array
  31.                 (
  32.                     [0] => Array
  33.                         (
  34.                             [0] => Array
  35.                                 (
  36.                                     [0] => Array
  37.                                         (
  38.                                             [0] => Array
  39.                                                 (
  40.                                                     [0] => 1 1 1 2 ,
  41.                                                 )
  42.  
  43.                                         )
  44.  
  45.                                 )
  46.  
  47.                         )
  48.  
  49.                     [1] => Array
  50.                         (
  51.                             [0] => Array
  52.                                 (
  53.                                     [0] => Array
  54.                                         (
  55.                                             [0] => 1 2 2 ,
  56.                                         )
  57.  
  58.                                 )
  59.  
  60.                         )
  61.  
  62.                 )
  63.  
  64.         )
  65.  
  66.     [1] => Array
  67.         (
  68.             [0] => Array
  69.                 (
  70.                     [0] => Array
  71.                         (
  72.                             [0] => Array
  73.                                 (
  74.                                     [0] => Array
  75.                                         (
  76.                                             [0] => 1 1 3 ,
  77.                                         )
  78.  
  79.                                 )
  80.  
  81.                         )
  82.  
  83.                     [1] => Array
  84.                         (
  85.                             [0] => 2 3 ,
  86.                         )
  87.  
  88.                 )
  89.  
  90.         )
  91.  
  92. )



Non si può ricevere un output più semplice? Grazie

PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 401
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 11:43
Venerdì, 25/08/2017
Il problema è che fai l'append di un array ad un altro array, quindi si innestano.
Dorvesti aggiungere tutti gli elementi  singolarmente, oppure usare una funzione che estenda o faccia il merge di due array, prova a cercare sulla documentazione.

PM Quote