Visualizzazione dei risultati da 1 a 10 su 19

Hybrid View

  1. #1
    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
    codice:
        public static int QuanteCifre(int n,int conta)
        {   if(n>0)
            {   n=n/10;
                conta++;
                System.out.println(conta);
                QuanteCifre(n,conta);
            }
            return conta;
        }
    Sappi innanzitutto che per il metodo ricorsivo non serve che riceva quel 'conta'! È sufficiente che riceve il valore da esaminare e basta.

    Devi ragionare più in senso ricorsivo e un esempio potrebbe chiarirti:

    Invochi direttamente il metodo passando es. 6789. Dato che è maggiore di 0, restituirai 1 + quello che ti fornisce la invocazione ricorsiva. La prima invocazione ricorsiva la fai passando 678 (il valore diviso 10). In questa invocazione il valore è maggiore di 0, quindi restituirai 1 + quello che ti fornisce la invocazione ricorsiva. Ecc....
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  2. #2
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Devi ragionare più in senso ricorsivo e un esempio potrebbe chiarirti:

    Invochi direttamente il metodo passando es. 6789. Dato che è maggiore di 0, restituirai 1 + quello che ti fornisce la invocazione ricorsiva. La prima invocazione ricorsiva la fai passando 678 (il valore diviso 10). In questa invocazione il valore è maggiore di 0, quindi restituirai 1 + quello che ti fornisce la invocazione ricorsiva. Ecc....
    ma quel ragionamento è esattamente quello che ho fatto io (credo..).
    sono riuscito a farlo con il metodo ricorsivo ma il metodo è void e non c'è alcun return, cosa che non è del tutto lecita perchè nella consegna viene specificato di restituire il valore.
    Quello che ho scritto:
    codice:
    class NumeroDiCifre
    {
        public static void QuanteCifre(int n,int i)
        {    if(n/10 != 0)
            {    n=n/10;
                i++;
                QuanteCifre(n,i);
            }else
                System.out.println("Ha "+i+" cifra/e");
        }
    
        public static void main(String[] args)
        {    int numero;
            System.out.print("Numero: ");
            numero = SavitchIn.readLineInt();        
            if(numero<0)    //valore assoluto del numero
                numero=numero*(-1);
            QuanteCifre(numero,1);
        }
    }
    non riesco a capire come fare senza passare il valore "conta"

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Invochi direttamente il metodo passando es. 6789. Dato che è maggiore di 0, restituirai 1 + quello che ti fornisce la invocazione ricorsiva. La prima invocazione ricorsiva la fai passando 678 (il valore diviso 10). In questa invocazione il valore è maggiore di 0, quindi restituirai 1 + quello che ti fornisce la invocazione ricorsiva. Ecc....
    facendo così mi dice "missing return statement" e se non ricordo male vuol dire che manca un else con un secondo return, quindi il mio dubbio resta, non capisco come farlo senza passare un contatore.

  4. #4
    Quote Originariamente inviata da mastodilu Visualizza il messaggio
    facendo così mi dice "missing return statement" e se non ricordo male vuol dire che manca un else con un secondo return, quindi il mio dubbio resta, non capisco come farlo senza passare un contatore.
    Infatti Io non ti ho detto di levare il return che fai in fondo ma di effettuare anche il return delle altre chiamate ricorsive....

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 © 2026 vBulletin Solutions, Inc. All rights reserved.