मान लीजिए डॉक्टरों और इंजीनियरों का एक विशेष परिवार है। कुछ नियम हैं, जो नीचे दिए गए हैं:
- हर किसी के दो बच्चे हैं
- इंजीनियर का पहला बच्चा इंजीनियर है, दूसरा बच्चा डॉक्टर है
- डॉक्टर का पहला बच्चा डॉक्टर है, दूसरा बच्चा इंजीनियर है
- डॉक्टरों और इंजीनियरों की सभी पीढ़ियां इंजीनियर से शुरू होती हैं
इसलिए यदि हम स्तर 4 और स्थिति 2 के लिए परिणाम चाहते हैं, तो परिणाम डॉक्टर होगा।
विचार सरल है। किसी व्यक्ति का पेशा निम्न दो बातों पर निर्भर करता है।
- पैरेंट का पेशा।
- नोड की स्थिति: जब नोड की स्थिति विषम होती है, तो उसका पेशा उसके पैरेंट के समान होता है। अन्यथा पेशा उसके पैरेंट से अलग होता है।
हम पैरेंट के पेशे को पुनरावर्ती रूप से ढूंढते हैं, फिर ऊपर दिए गए बिंदु 2 का उपयोग करके वर्तमान नोड का पेशा ढूंढते हैं।
उदाहरण
#include<iostream> using namespace std; char getProfession(int level, int pos) { if (level == 1) return 'E'; if (getProfession(level-1, (pos+1)/2) == 'D') return (pos%2)? 'D' : 'E'; return (pos%2)? 'E' : 'D'; } int main(void) { int level = 4, pos = 2; cout << "The profession is: "; if(getProfession(level, pos) == 'E'){ cout << "Engineer"; } else { cout << "Doctor" ; } } आउटपुट
The profession is: Doctor