রিকারসন হচ্ছে এমন একটা ফাংশন যেটা নিজেকেই নিজে কল করে। মানে ফাংশনের ভেতরেও আবার ওই ফাংশন কল করা হয় (আমি ধরে নিচ্ছি যারা এইটা পড়ছো তা ফাংশন আর ফাংশন কল কি তা জানো।) । ফাংশন আর রিকারসনের মধ্যে একটা পার্থক্য দেখালে রিকারসন কি তা বুঝতে একটু সুবিধা হবে।
ধরি আমার কাছে ৫ জন ব্যাক্তি a,b,c,d,e আসছে দেখা করার জন্য কিন্তু আমার কাজ শুধু e এর সাথে। এখন e কে আমার খুজে বের করতে হবে(যেহেতু e কে আমি চিনি না নাম জানি শুধু)। ফাংশনের বেলায় যা হয় তা হলো আমি প্রথমে a এর কাছে যাব জিজ্ঞেস করবো “তোমার নাম কি e?” a বলবে না আমার নাম তো e না তখন আমি b এর কাছে যাব একইভাবে জিজ্ঞেস করবো এরপর c,d সবশেষে e কে পাবো। কিন্তু রিকারসনের বেলায় ব্যাপারটা ভিন্ন তখন আমি a কে বলব তোমার নাম যদি e হয় তাহলে ভেতরে আসো নইলে e কে খুজে দাও কিন্তু a অনেক চালাক সে এতো খুজা খুজিতে নাই সে তার পাশের b রে বলবে e রে খুজে দিতে b বলবে c কে এভাবে সবশেষে e কে পাওয়া যাবে তখন আবার d, c কে বলবে e কে পাওয়া গেছে c বলবে b কে আর b বলবে aকে a আমাকে এসে বলবে e কথায় আছে। ফেক্টরিয়াল রিকারসনের একটা বাস্তব উদাহারণ। একটা সংখ্যার ফেক্টরিয়াল মানে সেই সংখ্যা থেকে শুরু করে তার নিচের ক্রমিক সংখ্যা গুলোর প্রত্যেকটির সামগ্রিক গুণফল। ধরি আমরা ৪ এর ফেক্টরিয়াল বের করব,
৪!= ৪!
বা, ৪!= ৪*৩!
বা, ৪!= ৪*৩*২!
বা, ৪!= ৪*৩*২*১(১!=১)
এখানে আমাদের দরকার ৪!, ৪! কল দিবে ৩! কে ৩! কল দিবে ২! কে এভাবে সবশেষে ১!=১ পাওয়া যাবে এখা ১! কে বেইস কেইস ধরা হবে(বেইস কেইস হলো এমন একটা সর্ত যা মানলে নির্দিষ্ট কিছু ফিরিয়ে দিবে।)
কোডঃ-
#include<bits/stdc++.h> using namespace std; int fact(int n){ if(n==0) return 1; //base case-1 return n*fact(n-1); //cycle n n-1 ke call dicche. } int main() { int n; cin>>n; cout<<fact(n)<<endl; return 0; }
উপরে ০ কে বেইস কেইসে রাখা হয়েছে কারণ ১-১=০ হবে আর আমরা জানি ০!=১।
Thank you so much…for this
LikeLiked by 1 person
This was helpful
LikeLiked by 1 person
ধন্যবাদ ভাইয়া।
LikeLiked by 1 person