Valorizzazione e visualizzazione ricorsiva di un array

/* p: da che posizione iniziare a valorizzare; dim: capienza massima array; max e min è il range di valorizzazione
 */
int *val(int p,int dim, int max, int min)
{
    static int *i=new  int[dim];
    if(dim>=0)
    {
        *(i+p++)=rand()%(max-min)+min;
        return val(p,dim-1,max,min);
    }
    else
    {
        return i;
    }
         
    
}
//usi: int *v=val(0,8,200,20);
void print(int *v, int dim)
{
    
    if(dim)
    {
        cout<<*(v++)<<" ";
        dim--;
        print(v,dim);
    }
    else
        cout<<endl;
    
}