Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Esercizio ricorsione

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2017
    residenza
    Terni
    Messaggi
    22

    Esercizio ricorsione

    Salve a tutti, potreste aiutarmi a risolvere il seguente esercizio???

    Sia n un intero la cui rappresentazione in base dieci è ckck-1ck-2...c1c0 (dove ogni simbolo ci è una cifra compresa tra 0 e 9) e sia a un array di int in cui l'elemento a[i] è pari a ci (0  i  k). Scrivere un metodo di classe ricorsivo che riceve in input a e restituisce n.
    Ad esempio, se a fosse il seguente array:
    3 2 4 5
    a0 a1 a2 a3

    il metodo dovrebbe restituire il valore 5432.

    Grazie mille a tutti.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2017
    residenza
    Terni
    Messaggi
    22
    nell'esercizio i va da 0 a k

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Puoi postare ciò che hai sviluppato tu finora?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2017
    residenza
    Terni
    Messaggi
    22
    certo eccolo. Sono alle prime armi mi scuso in anticipo se ho scritto qualcosa di troppo grave....

    codice:
    public static String decimale(int[] a, int i){
            
            String m;
            String dec = "";
            if(i==a.length){
                m = String.valueOf(a[0]);
                dec = "";
            }
            else{
                m = decimale(a,i+1);
                
                if(a[i]>Integer.parseInt(m)){
                    m = String.valueOf(a[i]);
                        dec = m + decimale(a,i+1);
                }
            }
        return dec;
        }
    Ultima modifica di LeleFT; 06-02-2017 a 17:35 Motivo: Aggiunti i tag CODE

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2017
    residenza
    Terni
    Messaggi
    22
    questo è quello che mi compare in fase di esecuzione

    Users\Alessandro\Desktop\ProgrammiJava\E12\ESERCIZ I DI ESAME\esami2012-2013>java Rappresentazione
    Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(Unk nown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at Rappresentazione.decimale(Rappresentazione.java:17 )
    at Rappresentazione.main(Rappresentazione.java:37)

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Al3xiei Visualizza il messaggio
    codice:
    public static String decimale(int[] a, int i){
            
            String m;
            String dec = "";
            if(i==a.length){
                m = String.valueOf(a[0]);
                dec = "";
            }
            else{
                m = decimale(a,i+1);
                
                if(a[i]>Integer.parseInt(m)){
                    m = String.valueOf(a[i]);
                        dec = m + decimale(a,i+1);
                }
            }
        return dec;
        }
    Se ho capito l'obiettivo, ti dico subito che Integer.parseInt NON ti serve. Inoltre il tuo codice è comunque contorto, dovresti cercare di ragionare un po' meglio. Se l'input è un array { 4, 3, 2, 1 } e l'obiettivo è di ottenere "1234", allora semplicemente ad ogni invocazione del metodo prendi il elemento i-esimo (0 al primo livello di invocazione, 1 al secondo, ecc...), convertilo in String (valueOf va bene) e poi lo dovrai appendere dietro la stringa che ti fornisce il livello di invocazione successivo.

    Cosa dovrebbe succedere se l'array passato è "vuoto"? Io direi: una stringa vuota.


    P.S. tutto questo si può scrivere con un semplicissimo if-else in cui entrambi i rami hanno un semplice return. Ovvero 4 righe di codice pulite pulite, graffe escluse. E usando l'operatore "condizionale" ?: si può scrivere in 1 sola riga.
    Ultima modifica di andbin; 07-02-2017 a 10:55
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2017
    residenza
    Terni
    Messaggi
    22
    Ciao e grazie della risposta, si è tutto chiaro. Se però l'array fosse del tipo{4,8,6,2}.......il risultato deve essere {8,6,4,2}
    come si potrebbe ragionare?????
    Grazie mille

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Al3xiei Visualizza il messaggio
    Ciao e grazie della risposta, si è tutto chiaro. Se però l'array fosse del tipo{4,8,6,2}.......il risultato deve essere {8,6,4,2}
    Ah .. questo non l'avevo capito bene. Quindi non basta comporre solo la stringa in modo "lineare"? Cioè si vuole anche ordinare la sequenza? Se è così, allora è MENO banale di quanto dicevo prima io.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2017
    residenza
    Terni
    Messaggi
    22
    l'esercizio chiede questo da quanto ho capito anche io, ti riporto il testo.....cmq credo sia un problema di ricerca e ordinamento.

    Sia n un intero la cui rappresentazione in base dieci è ckck-1ck-2...c1c0 (dove ogni simbolo ci è una cifra compresa tra 0 e 9) e sia a un array di int in cui l'elemento a[i] è pari a ci (0  i  k). Scrivere un metodo di classe ricorsivo che riceve in input a e restituisce n.
    Ad esempio, se a fosse il seguente array:
    3 2 4 5
    a0 a1 a2 a3

    il metodo dovrebbe restituire il valore 5432.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2017
    residenza
    Terni
    Messaggi
    22
    il capitolo sulla ricerca e gli algoritmi di ordinamento ancora non l'ho fatto. credo che più in la sarò in grado di risolvere.

    Colgo l'occasione per proporre un'altro esercizio.

    Scrivere un metodo di classe ricorsivo che riceve in input un array di interi a, un intero b, un intero k e altri parametri se necessario e restituisce true se l’array a contiene l’intero b almeno k volte.

    il cui codice da me scritto fino ad ora è il seguente:

    public static boolean contieneK(int[] a, int b, int k, int i){

    boolean esito = false;
    int count = 0;

    if(i==a.length)
    esito = false;
    else{
    esito = (a[i]==b && contieneK(a,b,k,i+1));
    count++;
    }

    if(count>=k)
    esito = true;

    return esito;
    }

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.