Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822

    PHP ha un BACO per le Ricorsioni ?

    Ciao ragazzi

    dopo aver fatto mille prove ho ridotto una mia funzione ai minimi termini e ho riscontrato che l'errore di STACK Overflow viene generato da una qualsiasi funzione RICORSIVA.
    Nell'esempio che vi riporto faccio ciclare all'infinito una funzione chiedendole di stampare a video un numero partendo da uno per arrivare a 10000. Questa funzione però si pianta quando arriva al numero 207 dandomi appunto l'errore di stack overflow.
    Come posso eliminare questo errore o almeno far si che si pianti dopo il numero 500 ?
    Uso windows 2003 server con php 4.3.10 e mysql 3.23.49

    <?
    $DB = "outside" ;

    mysql_connect("localhost","","") or die("ERRORE: Database non connesso");
    mysql_select_db($DB) or die("ERRORE: Database $DB non selezionato");

    function crea_Calendario($c)
    {

    echo "$c
    ";
    $c++;
    if ($c == 10000)
    exit;
    else
    crea_calendario($c);
    }

    $calendario = "alessandro" ;


    crea_Calendario('0');

    ?>
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

  2. #2
    cosa è crea_calendario($c); ? php è case sensitive
    debian:~$ uname -r
    2.6.18-1-686
    debian:~$

    Il quiz manager è nato!!! visitate http://shenk.altervista.org !!

  3. #3
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822
    In un modo o nell'altro (crea_calendario o crea_Calendario) non cambia niente.
    La funzione dovrebbe creare un calendario, ho lasciato il nome della funzione anche se qui non fa altro che aumentare di 1 il valore di una variabile.
    Ma perché si pianta ?
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

  4. #4
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822
    Ho trovato in RETE una direttiva che dice di abilitare XDEBUG nel php.ini. Ma non esist quella variabile nel php.ini
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

  5. #5
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    è meglio che nn dica dove c'è l'hai il baco, cmq

    Codice PHP:
    <?
    $DB 
    "outside" ;

    mysql_connect("localhost","","") or die("ERRORE: Database non connesso");
    mysql_select_db($DB) or die("ERRORE: Database $DB non selezionato");

    function 
    crea_Calendario($c)
    {

    echo 
    "$c
    "
    ;
    $c++;
    if (
    $c == 10000)
    exit;
    else
    crea_Calendario($c);
    }

    $calendario "alessandro" ;


    crea_Calendario(0);

    ?>
    e chi ti ha detto che crea_calendario nn è diverso di crea_Calendario?

    Stai tranquillo che c'è un abisso tra queste due frasi

  6. #6
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822
    Scaricando un'estensione del PHP chiamata XDEBUG ottengo maggiori informazioni

    Fatal error: Maximun function nesting level of '100' reached, Aborting !
    e poi mi fa la schermata nela quale vedo tutte le 100 volte che la funzione viene richiamata.

    Il che significa che PHP al massimo mi fa fare 100 ricorsioni. Mi auguro vivamente di non essere il primo ad avere avuto questo errore e che soprattutto ci sia un modo per risolverlo !!!!
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

  7. #7
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    Originariamente inviato da ivy_76
    Scaricando un'estensione del PHP chiamata XDEBUG ottengo maggiori informazioni

    Fatal error: Maximun function nesting level of '100' reached, Aborting !
    e poi mi fa la schermata nela quale vedo tutte le 100 volte che la funzione viene richiamata.

    Il che significa che PHP al massimo mi fa fare 100 ricorsioni. Mi auguro vivamente di non essere il primo ad avere avuto questo errore e che soprattutto ci sia un modo per risolverlo !!!!
    avere le ricorsioni limitate nn è diverso di avere un bug?
    In ogni caso, anche se ci sia un limite, puoi provare a fare un ciclo for.

  8. #8
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822
    Ripeto ho corretto crea_Calendario da tutte le parti. Il problema non è certo nel mio codice ! Qui è un problema del PHP
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

  9. #9
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822
    Scusa FinalFantasy, non capisco quello che mi dici ... Io devo fare una ricorsione perché la funzione che dovro utilizzare deve prendere la durata di una lavorazione e, creando un calendario, riempire una tabella MySql fino a finire tale lavorazione. Esempio il lavoro parte il 31-07-2005. So che il periodo di lavorazione è di circa 6 mesi. Il mio programma deve dire quando finirà quella lavorazione considerando il numero di operai disponibili e un mucchio di altre cose. PEr cui io sono obbligato a fare una ricorsione perché è impossibile a priori (nel mio caso) sapere quando finira; per cui il ciclo for non lo posso usare. Scusa se ho scritto in un pessimo italiano ma sono di frettissima
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

  10. #10
    Utente di HTML.it L'avatar di fabi080
    Registrato dal
    Mar 2002
    Messaggi
    442
    Qualsiasi cosa si può fare ricorsivamente si può anche fare iterativamente, per di più nella maggior parte dei casi con un'efficienza migliore, in quanto evita l'overhead delle chiamate a funzione.

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.