Entra

View Full Version : [PHP] Funzione ricorsiva?


Maestro
28-02-2010, 21:49
Ciao,

vi espongo brevemente il problema.

Ho una matrice di 25 elementi (5*5) riempiti casualmente con 25 lettere.

Partendo da un elemento a scelta della matrice sono arrivato a trovare le sue adiacenze e di queste considerare solo quelle "valide" tramite una funzione che controlla su un dizionario (scarto in pratica quelle che non corrispondono alla parte iniziale di qualche parola; es.: se l'elemento di partenza è A e le sue adiacenze sono B, C, W prendo in considerazione solo le prime due perché non esiste nessuna parola nel dizionario che inizi per AW).

Aggiorno la parola (A => AB => ABC) e vado avanti con la prima adiacenza valida dell'ultimo elemento.

Mi interrompo inoltre quando non esistono parole più lunghe che iniziano con il troncone formato (es.: mi fermo ad AB[primaadiacenzadiB] se è una parola finita).

Al momento considero solo la prima di quelle valide e quindi inserendo il tutto in un for (;;) che si interrompe quando non esistono più adiacenze valide e inutilizzate o quando la parola è completa. Vorrei mettere in parallelo il tutto e procedere per ogni adiacenza dell'adiacenza in modo ricorsivo e così via.

In pratica:


$x = "1";
$y = "1";

for (;;) {
$parola = $matrice[$x][$y];
$matrice[$x][$y] = "";

$adiacenze_valide = adiacenze_valide ($x, $y); // ARRAY o EXIT se non ci sono

while (count ($adiacenze_valide > 0)) {
switch ($i) {
case 0:
$x = ($x-1);
$parola .= $adiacenze_valide($i);
echo $parola;
break;
case 1:
...
case 2:
...
}
unset $adiacenze_valide($i);
}
if check_parola ($parola) {
echo "Parola completa: $parola";
exit;
}
}


Il codice prende in considerazione un solo tipo di adiacenza e non c'è problema (ho valorizzato un solo case nello switch), ma prendendo in considerazione tutte le adiacenze valide nel caso ce ne fossero più di una devo agire ricorsivamente per ognuna di esse, "separando il lavoro"?

Grazie dell'attenzione

Maestro
28-02-2010, 21:58
Un esempio forse vale più di un discorso:

http://www.nicolasantilli.net/paroliere.php?x=3&y=3

Si possono cambiare a piacere le coordinate (tenendo conto che sono invertite rispetto alla "visione" tradizionale).

Al momento prende in considerazione solo la prima valida in un ciclo infinito che si interrompe quando la parola è completa.

Dovrei prendere in considerazione ogni elemento valido e di questo ogni elemento valido ancora ogni elemento finché la parola non è completa. Per tanto, si potrebbero trovare più parole.