Una cosa così dovrebbe funzionare:

codice:
lib* max(lib* a, lib* b)
{
    if (a->prezzo > b->prezzo)
        return a;
    else
        return b;
}


lib* massimo_a_ricDI(lib v[],int primo,int ultimo)
{
    int mediano;
    if(primo == ultimo)
        return &v[primo];
    else
    {
        mediano=(primo+ultimo)/2;
        return max(massimo_a_ricDI(v,primo,mediano), massimo_a_ricDI(v,mediano+1,ultimo));
    }
}
Altrimenti, senza puntatori:

codice:
lib max(lib a, lib b)
{
    if (a.prezzo > b.prezzo)
        return a;
    else
        return b;
}


lib massimo_a_ricDI(lib v[],int primo,int ultimo)
{
    int mediano;
    if(primo == ultimo)
        return v[primo];
    else
    {
        mediano=(primo+ultimo)/2;
        return max(massimo_a_ricDI(v,primo,mediano), massimo_a_ricDI(v,mediano+1,ultimo));
    }
}