2017-09-16 153 views
0

我想運行下面的樹使用Fork()的遞歸函數。但是,我只能生成前3個孩子,對於其餘的樹,我失去了正確的參考。 Tree Picture樹叉()遞歸

void process_tree(int level, char *child[], int n){ 
int i; 
int index = child[n]; 
int myP; 
int status; 

if(n >= level){ 
    exit(0); 
} else { 
    for (i=0; i < index; i++){ 
     myP = fork(); 
     switch(myP){ 
      case -1: 
       printf("fork failed\n"); 
       break; 
      case 0: 
       printf("Son - %d de %d\n\n", getpid(), getppid()); 
       n++; 
       process_tree(level, child, n); 
       break; 

      default: 
       break; 
     } 
    } 
    for (i=0; i< index; i++){ 
     wait(&status); 
    } 
} 
} 

int main(){ 
int level = 4; 
int n = 0; 
int child [] = {3, 2, 1, 1}; 
printf("[Father] -> [%d]\n\n", getpid()); 
process_tree (level, child, n); 
} 

回答

1

它看起來像你的遞歸終止過早退出程序。通過遞歸,我通常使用'return'。