return di una funzione ricorsiva

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao a tutti,
ho un problema con il return di una funzione ricorsiva che sto scrivendo
per recuperare degli id particolari dal database.

Ho ridotto al minimo essenziale per capirne la logica ma proprio non ci arrivo.

Il return è sempre null.

Ho risolto usando la SESSION ma mi sto ancora chiedendo il perchè.

Qualcuno ha una soluzione anche alternativa alla mia? in modo da non usare le sessioni

PHP:
function ricorsiva($numero) {
// se il risultato è quello che cerco esco
    if ($numero == 5) {
        $_SESSION['numero'] = $numero;
        return $numero;
// altrimenti richiamo di nuovo la funzione cambiando il parametro
    } else {
        ricorsiva($numero + 1);
    }
}

// richiamo la funzione 
$risultato = ricorsiva(1);

// $risultato è null
var_dump($risultato);
// in session invece trovo il valore
var_dump($_SESSION['numero']);


grazie.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Vi posto anche lo script originale nel caso vi venga in mente un altra soluzione

Ho una tabella livelli che ha 2 campi:
idutentepadre
idutente

Ogni utente può essere sia padre che figlio

Ricevuto un id devo risalire al capostipite della tabella

Questa era la mia idea:

PHP:
$conn = mysql_connect('host', 'user', 'pass', 'database');
$db = mysql_select_db('database', $conn);

function capostipite($conn, $idfiglio) {
// inizializzo il capostipite
    $capostipite = $idfiglio;
// query nella tabella livelli
    $query = "SELECT idutentepadre FROM livelli
                                   WHERE idutente = $idfiglio";
//  eseguo la query
    $result = mysql_query($query);
// se non ho risultati ho trovato il capostipite ed esco
    if ($result && mysql_num_rows($result) == 0) {
        //la session funziona ma il return no
        $_SESSION['capostipite'] = $capostipite;
        return $capostipite;
// altrimenti richiamo la funzione passandogli l'id padre recuperato
    } else {
        $padre = mysql_result($result, 0, 'idutentepadre');
        capostipite($conn, $padre);
    }
}

//richiamo la funzione passandogli un idfiglio
$capostipite = capostipite($conn, 3022);
//la variabile capostipite è null
var_dump($capostipite);
// nalla session invece ho l'id che cerco
var_dump($_SESSION['capostipite']);
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
potresti risolverla semplicemente così

PHP:
<?php
function no_ricorsiva($numero) {
	while($numero <5){
		$numero++;
	}
	return $numero;
}

// richiamo la funzione
var_dump(no_ricorsiva(1));
?>
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ottima suluzione!

grazie!

Ci ho messo un po ad adattarla ma ora è perfetta.

PHP:
function capostipite($conn, $idfiglio) {

    $esco = 0;
    while ($esco = 1) {
        $query = "SELECT idutentepadre FROM livelli
                                   WHERE idutente = $idfiglio";

        $result = mysql_query($query);

        $idfiglio = mysql_result($result, 0, 'idutentepadre');

        if (mysql_num_rows($result) == 0) {
            $esco = 1;
        }
     return $idfiglio;
    }
    
}
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
grande Ale! non mi sarei mai rassegnato
 
Discussioni simili
Autore Titolo Forum Risposte Data
C Return Path Aruba PHP 8
S [Javascript] Carrige return massaggi email Javascript 2
tanosk8 G. Albanese  laurendo programmatore {code...;} return (x); Presentati al Forum 1
K eliminare il carriage return Javascript 4
T problemi return path Aiuto PHP 11
J modificare il sequente codice utilizzando il php return PHP 0
S Problema return con funzione PHP 2
M Return - Che ne pensate dei return senza un valore ? PHP 4
K Assigning the return value of new by reference is deprecated [esyndicat] PHP 1
A Dubbio su return funzione PHP 3
emanuelevt il senso di return true PHP 7
P C# Salvare una colonna del DataGridView XML 0
M pulsante per aprire una maschera che contiene controllo schede MS Access 0
M Leggere in un report il valore di una casella combinata di una maschera Database 0
D Miglior modo per estrarre le occorrenze di un elemento in un set di più file xml e quindi scrivere il risultato in una tabella Excel o magari in JSON XML 0
S [VB.NET]: Coordinate immagini dentro una PictureBox Visual Basic 0
I stampare una stringa echo PHP 2
MarcoGrazia Riprendere una sessione interrotta PHP 0
L Rendere una parte trasparente Photoshop 3
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
K Visualizzare del html responsive in una Webview Sviluppo app per Android 0
otto9due Ordinare option di una select Javascript 5
N Come si crea una variabile dinamica da incrementare? Javascript 1
L Eliminazione di una pagina dalla gallery SEO e Posizionamento 0
otto9due Proteggere una cartella e file con password tramite .htaccess e .htpasswd Web Server 0
L Riempimento di una tabella al click di un bottone Javascript 1
R Variabile non risconosciuta dentro una funzione PHP 1
C ACCESS Aprire maschera se valore non presente in una combo MS Access 7
A media degli elementi estratti da una query MySQL 0
spider81man Eliminare primo ed ultimo carattere di una colonna MySQL 0
pacemattia408 disattivazione di una function Javascript 4
G Eliminare l'effetto refresh di una pagina internet PHP 8
otto9due Inserire o aggiornare tabella my sql controllando una coppia di valori PHP 7
M Select Option dentro una Table jQuery 2
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
E Scrivere una data corrente in un pdf PHP 1
Sergio Unia Problema con gli eventi del mouse su una data table: Javascript 2
I Assegnare dati fetch request ad una variabile globale Javascript 0
Shyson Puntare ad una sotto directory WordPress 3
Stex1967 Salvare una immagine che si trova su porta TCP 8080 di altro sito PHP 7
S Selezionare ultimo record di una sotto query MySQL 27
V Query per una somma PHP 2
L Mysql: Nascondere le pagine dopo una ricerca PHP 1
L salvare una immagine elaborata in canvas Javascript 1
L salvare una immagine elaborata in canvas Javascript 1
W visualizzare solo file html e sottocartelle di una cartella PHP 1
W Elenco dei link del file presenti in una cartella PHP 2
R Mettere in sicurezza una comunicazione .NET Framework 0
L Creare una forma geometrica Photoshop 1

Discussioni simili