Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    23

    esercizio matematico

    Ciao a tutti avrei bisogno di un aiutino per l'università nel compito
    scritto di java c'era un esercizio:

    public static int f(int x) {

    if(x == 1) return x;

    int z = x % 2;

    return 1 + f(x/2) + f(z + x/2);
    }


    ora io lo devo risovere al momento,non posso sottoporlo al compilatore,
    sinceramente non riesco a capirlo come si risolve una cosa del genere
    lui ci ha dato questo metodo e ci ha detto di determinare il valore ritornato
    invocando il metodo f con le chiamate f(4) e f(7).
    Se qualcuno sa spiegarmelo,grazie ciao.

  2. #2
    Allora in realtà è meno complicato di quello che sembra, è una semplice ricorsione.

    Per sapere cosa restituisce quel metodo quando gli passi dei valori devi fartelo a manina.

    Per esempio:
    codice:
    f(4)
    
    1° passaggio
    
    f(4) = 1 + f(2) + f(2) //abbastanza semplice trovare questa notazione, basta sostituire il 4 al posto di x
    
    2° passaggio
    
    f(2) = 1 + f(1) + f(1) //analogamente troviamo le f(2) stesso criterio della f(4)
    
    3°
    
    f(1) = 1 // e successivamente la f(1) anche se non è molto utile visto che f(1)=1
    
    infine basta fare la somma dei risultati
    
    f(4) = 1 + (1+f(1)+f(1)) + (1+f(1)+f(1)) //sostituendo i risultati ottenuti
    
    quindi f(4) = 7.
    analogamente si fa con la f(7):

    codice:
    1°
    
    f(7) = 1 + f(3) + f (4) //sepmpre per sostituzione, a questo punto f(4) sappiamo già cosa vale quindi ci basta trovare f(3)
    
    2°
    
    f(3) = 1 + f(1) + f(2) // abbiamo già (dai passaggi fatti per la f(4)) sia f(1) che f(2) quindi basta fare anche qui la somma
    
    f(7) = 13
    Spero di esser stato chiaro

    Purtroppo bisogna imparare che il computer non sbaglia...fa solo quello che gli dici di fare

    www.netpolaris.it

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: esercizio matematico

    Originariamente inviato da guajira
    public static int f(int x) {

    if(x == 1) return x;

    int z = x % 2;

    return 1 + f(x/2) + f(z + x/2);
    }
    È un metodo "ricorsivo" (richiama sé stesso). Parti dalla prima chiamata iniziale es. f(4), z vale 0 a quel punto viene chiamato 2 volte ricorsivamente prima con 2 (4/2) e poi con 2 (0 + 4/2). Prosegui così fino all'ultima chiamata che non effettuerà più la ricorsione grazie al test fatto con if.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.