Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130

    funzione ricorsiva che non va

    lo script seguente dovrebbe fare le seguenti cose:
    - generare un numero random e sottrarlo all numero 30
    - valutare se il valore assoluto della sottrazione e maggiore di 40
    - se il risultato è maggiore di 39 rilanciare il processo di generazione del numero random e rifare la sottrazione (ricorsivamente)
    - inoltre dovrebbe contare e istanzare in $numero_tentativi il numero di volte che il processo deve essere reiterato per soddisfare la condizione "abs($diff) < 40"
    - restituire sia il valore del numero random che rispetta la condizione "abs($diff) < 40" che il numero di iterazioni.

    A volta la funzione non restituisce niente mentre non restituisce MAI il numero di iterazioni. Come mai?


    <?
    $numero_tentativi = 0;

    $y = 30;

    function val_distanze($y_old){
    $new_random = rand(0, 576);
    $diff = $y_old - $new_random;
    if(abs($diff) < 40){
    val_distanze($y_old);
    $numero_tentativi++;
    }
    else {
    return $new_random . " / " . $numero_tentativi;
    }
    }

    echo val_distanze($y);

    ?>

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Ad occhio, mi pare che il motivo sia semplicissimo. Se entri nell'if non hai return, quindi l'unico caso in cui ti stampa qualcosa è quello in cui entri nell'else la prima volta, cioè quando il numero di tentativi è zero.

  3. #3
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    si ma all'inizio $numero_tentativi veine istanziato a zero. come mai non stampa nemmeno quello?

    tra l'altro a volte non mi stampa nemmeno il $new_random. questo non dovrebbe mai succedere. Boh!

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Puoi istanziarlo anche a 7000, ma se non lo stampi non lo vedrai mai. Dentro l'if non c'è nessun output.

  5. #5
    il $numero_tentativi che instanzi a 0 e il $numero_tentativi che incrementi o restituisci nella funzione non è lo stesso, all'interno della funzione $numero_tentativi non esiste, devi mettere global $numero_tentativi per far in modo che il $numero_tentativi interno alla funzione sia quello esterno che instanzi all'inizio

  6. #6
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    ok ho fatto questa versione in modo da risolvere la cosa. però continua ad evere gli stessi difetti esposti all'inizio

    <?php

    $y = 30;

    function val_distanze($y_old){

    static $numero_tentativi = 0;
    $numero_tentativi++;

    $new_random = rand(0, 576);

    $diff = $y_old - $new_random;
    if(abs($diff) < 40){
    val_distanze($y_old);
    }
    else {
    return $new_random . " / " . $numero_tentativi;
    }
    }

    echo val_distanze($y);

    ?>

    che faccio? grazie

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Gli stessi difetti? Non credo proprio.... per me questa va in loop

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.