Comunque questa è la versione con la variabile static, non ve l'ho postata subito, vi avevo lasciato solo l'indizio...
#include <stdio.h>
struct insieme
{
double * a;
int l;
};
insieme * intersezione(insieme i1, insieme i2)
{
int k, j;
double temp;
insieme * ret = NULL;
static unsigned int step = 0;
for(k = step; k < i1.l; k++)
for(j = step; j < i2.l; j++)
if(i1.a[k] == i2.a[j])
{
temp = i1.a[step];
i1.a[step] = i1.a[k];
i1.a[k] = temp;
temp = i2.a[step];
i2.a[step] = i2.a[j];
i2.a[j] = temp;
step++;
return intersezione(i1, i2);
}
ret = (insieme *)malloc(sizeof(insieme));
if(ret == NULL){
step = 0;
return NULL;
}
ret->l = step;
if(step){
ret->a = (double *)malloc(step*sizeof(double));
if(ret->a == NULL)
{
step = 0;
return NULL;
}
while(step--)
ret->a[step] = i1.a[step];
}
else
ret->a = NULL;
step = 0;
return ret;
}
L'ordinamento è inevitabile: pensate bene a come risolvereste voi il problema con due sacchetti di palline colorate.
Se non volete toccare gli insiemi di partenza, fatene due insiemi copia prima.
Esistono anche funzioni per il sort e per la copia, non ci sarebbe bisogno di fare nulla a mano.
A voi la palla