Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Dubbio invocazione metodo ricorsivo

    Ciao,
    ho un dubio su come invocare un metodo ricorsivo dentro il costruttore (vabbè non c'entra molto dove lo invoco in realtà...)

    Ho una classe che ha 2 variabili di istanza di cui la prima è un array chiamato heap mentre la seconda conterrà il numero di elementi presenti nell'array heap.

    Eccovi la porzione di codice relativa alla definizione delle variabili di istanza ed al costruttore che le inizializza:

    codice:
    <?php
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    
    /* Classe che implementa la struttura dati HEAP e la sua funzionalità per
       l'ordinamento di una collezione mediante l'algoritmo di ordinamento
       Heap Sort */
    
     class Heap{
     	
     	/* Variabile di istanza che implementa la struttura dati ad albero dell'heap per mezzo di 
    	   un array */
     	private $heap = array();
     	private $heapSize;			// Variabile di istanza che conterrà la dimensione dell'heap
     	
     	/* COSTRUTTORE: Copia l'array parametro nella variabile di istanza heap e mette dentro
    	   la variabile di istanza heapSize la sua dimensione */
        
        public function __construct($arr){
        	
        	for($i=0; $i<count($arr); $i++)
        		$this->heap[$i+1] = $arr[$i];
        		
       		$this->heapSize = count($this->heap);// Mette dentro heapSize la dimensione dell'array parametro
       		echo "Heap inizializzato con i valori dell'array parametro, contenuto heap: ";
       		print_r($this->heap);
       		
       		/* Invoca il metodo heapify() sull'array heap partendo dalla prima posizione che sarà così                      trasformato in un HEAP a tutti gli effeti */
       	//	$this->heap = $this->heapify($this->heap, 1);
       		echo "Dopo l'invocazione di heapify() il contenuto dell'heap è:  ";
       		print_r($this->heap);
    	}
    Non fate caso ai print_r() che sono stati inseriti solo come test...

    Il dubbio mi viene sull'invocazione del metodo ricorsivo heapify().
    Praticamente io ho la variabile (che è un array) di istanza heap, tale array deve essere modificato e trasformato in una forma particolare. Il metodo heapify() è un metodo che trasforma tale array iniziale in modo ricorsivo a partire da un certo indice (il secondo parametro) in tale specifica forma.

    Tralasciando come heapify() trasformi l'aray...mi sorge il dubbio...l'invocazione fatta così:
    $this->heap = $this->heapify($this->heap, 1);
    che mette dentro heap il valore restituito da heapify (che dovrebbe essere l'aray riarrangiato) va bene o no...a rivederla non mi sembra corretta...alla fine heapify() non deve restituire nulla...deve modificare l'array heap...

    Quindi forse nopn è meglio invocarla così:
    codice:
    $this->heapify(1)
    e fare in modo che non restituisca nulla ma modifiche l'array $heap dell'oggetto in questione?

    Grazie
    Andrea

  2. #2
    Cosa passarlo, come ed in che modo gestire il valore di ritorno del metodo heapify() dipende da come è stato implementato il metodo stesso. Informazione, quest'ultima, mancante.

  3. #3
    Originariamente inviato da filippo.toso
    Cosa passarlo, come ed in che modo gestire il valore di ritorno del metodo heapify() dipende da come è stato implementato il metodo stesso. Informazione, quest'ultima, mancante.
    Il metodo lo devo ancora implementare...appunto vorrei sapere se logicamente ha più senso il primo tipo o il secondo tipo...

    A mio avviso ragionando in modo OO forse sarebbe meglio il secondo tipo perchè mando un messaggio (l'invocazione del metodo heapify) ad un oggetto di cui modifico la variabile di istanza...

    Te che ne pensi?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.