Salve, ho difficoltà a risolvere il costo asintotico della funzione f() del seguente algoritmo
static int f(int q) {
if(q <= 1) return q;
if((q % 2) == 0) return g(q>>1);
else return f(q-1);
}
static int g(int r) {
if(r <= 1) return f(r);
if((r % 3) == 0) return f(r/3);
else return f(r+1);
}
Ho pensato che il caso peggiore è quello in cui q>>1 non è mai divisibile per 3 e che il numero di chiamate di g siano logaritmiche in funzione di q, ma non riesco ad andare avanti.Qualcuno potrebbe spiegarmi come ci si muove quando mi trovo davanti ad algoritmi simili?
Grazie per le eventuali risposte