Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 19 su 19
  1. #11
    fatto... ma non mi è del tutto chiaro:
    codice:
    class NumeroDiCifre
    {
        public static int QuanteCifre(int numero)
        {   
            if(numero>1)
            {  numero=numero/10;
                return 1+QuanteCifre(numero);
            }else
                return 0;
        }
        
        
        public static void main(String[] args)
        {    int numero,n;
            System.out.print("Inserisci il numero: ");
            numero=SavitchIn.readLineInt();
            n=QuanteCifre(numero);
            System.out.print("Ha "+n+" cifra/e");
        }
    }
    Ultima modifica di mastodilu; 08-01-2015 a 12:19

  2. #12
    Allora se vuoi eliminare il conta è un'altro "conto" scusa il gioco di parole, cmq anche in questo caso ti servono 2 return, una appunto per effettuare le chiamate ricorsive 1 + QuanteCifre(n) e l'altra per "stoppare" la ricorsione quando n diventa < 0.

  3. #13
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da mastodilu Visualizza il messaggio
    ok ma il return che avevo messo serviva a restituire "conta" che mi è stato detto essere inutile...
    Sì, è inutile.
    L'ho detto nella prima risposta ma lo posso ripetere meglio: se il numero è maggiore (o diverso se vuoi gestire anche i negativi) di zero, allora dovrai restituire un 1 fisso più il valore fornito dalla invocazione ricorsiva in cui passi il numero diviso 10.
    Altrimenti se è zero, restituisci 0.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #14
    se il numero è maggiore (o diverso se vuoi gestire anche i negativi) di zero, allora dovrai restituire un 1 fisso più il valore fornito dalla invocazione ricorsiva in cui passi il numero diviso 10.
    Altrimenti se è zero, restituisci 0.[/QUOTE]
    così?
    codice:
        public static int QuanteCifre(int numero)
        {
            if(numero>0)
            {   numero=numero/10;
                return 1+QuanteCifre(numero);
            }else
                return 0;
        }
    funziona ma non capisco perchè
    Ultima modifica di mastodilu; 08-01-2015 a 12:18

  5. #15
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da mastodilu Visualizza il messaggio
    così?
    Sì. Puoi anche passare alla invocazione ricorsiva direttamente il risultato della divisione, invece di aggiornare 'numero'. Ma comunque è ok.

    Quote Originariamente inviata da mastodilu Visualizza il messaggio
    funziona ma non capisco perchè
    Es. 1234

    codice:
    QuanteCifre(1234): 1234 maggiore di 0, quindi 1 + QuanteCifre(123)
       QuanteCifre(123): 123 maggiore di 0, quindi 1 + QuanteCifre(12)
          QuanteCifre(12): 12 maggiore di 0, quindi 1 + QuanteCifre(1)
             QuanteCifre(1): 1 maggiore di 0, quindi 1 + QuanteCifre(0)
                QuanteCifre(0): zero, quindi 0

    Quanti "1" vengono sommati?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #16
    L'unico modo che hai per capirlo è eseguirlo passo passo (intendo mentalmente).
    N=1234;
    1 -> numero = numero/10 = 123 -> return 1 + -> QuanteCifre
    2-> numero = numero/10 = 12 return 1+1 -> QuanteCifre (l'uno in + deriva dalla prima invocazione)
    3-> numeor = numero/10 = 1 return 1+1+1 .....

  7. #17
    La logica l'ho capita ma non riesco a capire come possa funzionare una funzione ricorsiva che ogni volta ha un return che dovrebbe finire nella variabile n=funzione_ricorsiva(variabile).
    Ogni volta che la funzione viene invocata da se stessa non dovrebbe "sovrascrivere" n ?
    Inoltre se ogni chiamata ricorsiva "crea la stessa funzione ma a sè stante" come fa a sommare 1 ogni volta e a tenere la conta degli 1 precedentemente sommati?

  8. #18
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da mastodilu Visualizza il messaggio
    La logica l'ho capita ma non riesco a capire come possa funzionare una funzione ricorsiva che ogni volta ha un return che dovrebbe finire nella variabile n=funzione_ricorsiva(variabile).
    Ogni volta che la funzione viene invocata da se stessa non dovrebbe "sovrascrivere" n ?
    Inoltre se ogni chiamata ricorsiva "crea la stessa funzione ma a sè stante" come fa a sommare 1 ogni volta e a tenere la conta degli 1 precedentemente sommati?
    Ma hai visto il mio esempio con 1234 dove ho evidenziato anche l'annidamento delle invocazioni con una lieve indentazione?

    Ok, partiamo dal fondo e torniamo indietro:

    al livello di QuanteCifre(0) esso restituisce 0
    al livello di QuanteCifre(1) esso fa 1 + 0 e restituisce quindi 1
    al livello di QuanteCifre(12) esso fa 1 + 1 e restituisce quindi 2
    al livello di QuanteCifre(123) esso fa 1 + 2 e restituisce quindi 3
    al livello di QuanteCifre(1234) esso fa 1 + 3 e restituisce quindi 4
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #19
    dovrei averlo fatto, grazie a tutti

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.