Pregunta: ¿Cuántos hilos habrá al terminar ese bucle? 
Respuesta: 4 
Explicación: 
- En la primera iteración tendremos dos, el padre (P) y un hijo (H1)
- En la segunda iteración tendremos 4 ( P crea 1 y H1 crea otro)
Luego tu intento de crear únicamente N hijos no funciona porque estás creando un número de hijos desproporcionado. 
Por otro lado, llamar a fork hace que el hijo tenga una copia de la memoria del padre y a partir de ese momento cada uno usa su propia memoria... almacenar en un arreglo los id no parece una buena idea porque cada proceso va a almacenar un arreglo diferente. 
Si el número de hijos es una constante puedes probar algo tal que:    
Código C:
Ver original- if( fork() )  
-   if( fork() ) 
-     if( fork() ) 
-       return; // Aqui solo llega el padre 
-   
- funcion(); // Los 3 hijos ejecutan esto 
También puedes embeber el código en un bucle... pero teniendo cuidado de crear procesos únicamente desde el padre:    
Código C:
Ver original- #define HIJOS 3 
- int main() 
- { 
-   int padre = getpid(); 
-   
-   for( int i=0;i<HIJOS;i++) 
-     if( !fork() ) break; 
-   
-   if( getppid() == padre ) // Si el padre del proceso actual es el proceso principal estamos tratando con un hijo 
- } 
Un saludo.