দেওয়া সমস্যায়, আমাদের একটি পূর্ণসংখ্যা n দেওয়া আছে এবং আমাদের Pn বের করতে হবে, অর্থাৎ সেই পজিশনের পেল সংখ্যা। পেল সংখ্যা একটি সিরিজের অংশ যা এই সূত্র দিয়ে দেওয়া হয়: Pn = 2*Pn-1 + Pn-2
প্রথম দুটি শুরুয়ের সংখ্যা: P0 = 0 এবং P1 = 1
সমাধানের পদ্ধতি
এখন আমরা এই সমস্যাকে দুটি পদ্ধতিতে সমাধান করব: রিকারসিভ এবং ইটারেটিভ।
রিকারসিভ পদ্ধতি
এই সূত্রে, আমরা পেল সংখ্যার সূত্রটি রিকারসিভলি প্রয়োগ করব এবং n ইটারেশন করব।
উদাহরণ
#include <iostream> using namespace std; int pell(int n) { if(n <= 2) return n; return 2*pell(n-1) + pell(n-2); } int main() { int n = 6; // দেওয়া n cout << pell(n) <<"\n"; // সেই পজিশনের পেল সংখ্যা। return 0; }
আউটপুট
70
উপরোক্ত কোডের ব্যাখ্যা
এই পদ্ধতিতে, আমরা রিকারসন ব্যবহার করি pell(n-1) এবং pell(n-2) কল করে যতক্ষণ n, ২ থেকে ছোট বা সমান হয় না, কারণ আমরা জানি ২ পর্যন্ত পেল সংখ্যাগুলো দেওয়া সংখ্যার সমান। উপরের প্রোগ্রামের ওভারঅল টাইম কমপ্লেক্সিটি O(N), যেখানে N হল দেওয়া সংখ্যা।
ইটারেটিভ পদ্ধতি
এই পদ্ধতিতে, আমরা উপরের মতো একই সূত্র ব্যবহার করব কিন্তু রিকারসিভ ফাংশন না ব্যবহার করে একটি for লুপ ব্যবহার করে সংখ্যা ক্যালকুলেট করব।
উদাহরণ
#include <iostream> using namespace std; int main() { int n = 6; // দেওয়া n। int p0 = 0; // pn-2-এর প্রাথমিক মান। int p1 = 1; // pn-1-এর প্রাথমিক মান। int pn; // আমাদের উত্তর। if(n <= 2) // যদি n <= 2 হয় তবে n প্রিন্ট করুন। cout << n <<"\n"; else { for(int i = 2; i <= n; i++) { // ২য় সংখ্যা থেকে n পর্যন্ত বের করব। pn = 2*p1 + p0; p0 = p1; // নতুন i-এর জন্য pn-1 হয়ে যায় pn-2। p1 = pn; // নতুন i-এর জন্য pn হয়ে যায় pn-1। } cout << pn << "\n"; } return 0; }
আউটপুট
70
উপরোক্ত কোডের ব্যাখ্যা
দেওয়া প্রোগ্রামে, আমরা ২ থেকে n পর্যন্ত ট্রাভার্স করি এবং pn-2 কে pn-1 এবং pn-1 কে pn আপডেট করি যতক্ষণ n-এ পৌঁছাই।
উপসংহার
এই আর্টিকেলে, আমরা রিকারসন এবং ইটারেশন ব্যবহার করে N-তম পেল সংখ্যা বের করার সমস্যা সমাধান করেছি। আমরা এই সমস্যার জন্য C++ প্রোগ্রাম এবং সম্পূর্ণ পদ্ধতি (সাধারণ ও দক্ষ) শিখেছি। একই প্রোগ্রামটি C, Java, Python এবং অন্যান্য ভাষায়ও লিখা যায়।