POJ-1680(遞迴模擬)
阿新 • • 發佈:2019-01-29
分析:父程序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(--K == 0){ printf("Loop %d: Process ID=%d\n", i, p); return true; } a += 7; if(dfs(++i, a, ++P)) return true; } return false; } int main() { int t; for(scanf("%d", &t); t--; ){ scanf("%d%d", &N, &K); dfs(0, 0, P = kRoot); } return 0; }