একটি স্পেশাল ফ্যামিলি আছে ডাক্তার (Doctor) এবং ইঞ্জিনিয়ার (Engineer) দিয়ে। কিছু নিয়ম আছে:
- প্রত্যেকের দুটি সন্তান আছে
- ইঞ্জিনিয়ারের প্রথম সন্তান ইঞ্জিনিয়ার, দ্বিতীয় সন্তান ডাক্তার
- ডাক্তারের প্রথম সন্তান ডাক্তার, দ্বিতীয় সন্তান ইঞ্জিনিয়ার
- সকল প্রজন্ম ইঞ্জিনিয়ার দিয়ে শুরু হয়
যদি লেভেল ৪ এবং পজিশন ২ জানতে চাই, তবে ফলাফল হবে Doctor।
আইডিয়া সহজ। একজন ব্যক্তির পেশা দুটি জিনিসের ওপর নির্ভর করে:
- প্যারেন্টের পেশা।
- নোডের পজিশন: যদি পজিশন বিজোড় (odd) হয়, তবে তার পেশা প্যারেন্টের মত হয়। অন্যথায় প্যারেন্ট থেকে ভিন্ন হয়।
রিকার্সিভলি (recursively) প্যারেন্টের পেশা বের করব, তারপর উপরের বিন্দু ২ ব্যবহার করে বর্তমান নোডের পেশা নির্ণয় করব।
উদাহরণ
#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