Oppure

Loading
24/08/17 15:06
giocala88
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

function algo_p($number, $n, $d)
{
    if($number === 0 )
    {
        echo $d;       
    }        
    else
    {
        if($n > 1)
        {
            algo_p($number, $n-1, $d);
        }
        if($n <= $number)
        {
            algo_p($number-$n, $n, $n . " " . $d);            
        }
    }

    
}

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


aaa
24/08/17 15:26
lumo
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.
aaa
25/08/17 9:01
giocala88
Intendi una cosa del genere?

function algo_p($number, $n, $d)
{
    if($number === 0 )
    {
        $array[] = $d;  
        return $array;     
    }        
    else
    {
        if($n > 1)
        {
            $array[] = algo_p($number, $n-1, $d);
        }
        if($n <= $number)
        {
            $array[] = algo_p($number-$n, $n, $n . " " . $d);            
        }
    }

    
}


Non stampa nulla 8-|
aaa
25/08/17 9:30
lumo
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.
aaa
25/08/17 9:36
giocala88
Ho modificato il codice ritornando l'array e l'output è una cosa del genere:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [0] => Array
                                (
                                    [0] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [0] => 1 1 1 1 1 ,
                                                        )

                                                )

                                        )

                                )

                        )

                )

            [1] => Array
                (
                    [0] => Array
                        (
                            [0] => Array
                                (
                                    [0] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [0] => 1 1 1 2 ,
                                                )

                                        )

                                )

                        )

                    [1] => Array
                        (
                            [0] => Array
                                (
                                    [0] => Array
                                        (
                                            [0] => 1 2 2 ,
                                        )

                                )

                        )

                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [0] => Array
                                (
                                    [0] => Array
                                        (
                                            [0] => 1 1 3 ,
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [0] => 2 3 ,
                        )

                )

        )

)


Non si può ricevere un output più semplice? Grazie
aaa
25/08/17 9:43
lumo
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.
aaa