题目:http://poj.org/problem?id=1680
分析:父进程wait会等到子进程执行完成之后才继续下一步,每个进程都执行相同的代码,刚好和递归函数调用的方式一致。
需要注意的是【ProcessID==0】每个子进程仅打印一次,对应到递归调用中,就是进入函数时打印一次。
由于题目只要求获得打印的某一行,这里可以优化递归的退出条件,不需要执行到底:发现当前打印的是目标行就退出整个递归。
#include <cstdio>
const int kRoot = 1000;
int N, K, P;
bool dfs(int i, int a, int p)
{
if(p != kRoot){
if(--K == 0){
printf("Process ID=%d, A=%d\n", p, a);
return true;
}
}
while(i < N){
if(