কম্পিউটার

ডেটা স্ট্রাকচারে পুনরাবৃত্তির নীতি


পুনরাবৃত্তি হল একটি প্রক্রিয়া যার মাধ্যমে একটি ফাংশন নিজেকে কল করে। আমরা ছোট উপ-সমস্যাতে বড় সমস্যা সমাধানের জন্য পুনরাবৃত্তি ব্যবহার করি। একটি জিনিস আমাদের মনে রাখতে হবে, যদি প্রতিটি উপ-সমস্যা একই ধরণের প্যাটার্ন অনুসরণ করে, তবেই আমরা পুনরাবৃত্তিমূলক পদ্ধতি ব্যবহার করতে পারি।

একটি পুনরাবৃত্ত ফাংশন দুটি ভিন্ন অংশ আছে. বেস কেস এবং রিকারসিভ কেস। বেস কেসটি পুনরাবৃত্তির কাজটি শেষ করতে ব্যবহৃত হয়। যদি বেস কেস সংজ্ঞায়িত না হয়, তাহলে ফাংশনটি অসীম সংখ্যক বার পুনরাবৃত্তি করবে (তাত্ত্বিকভাবে)।

কম্পিউটার প্রোগ্রামে, যখন আমরা একটি ফাংশনকে কল করি, তখন প্রোগ্রাম কাউন্টারের মানটি ফাংশন এলাকায় যাওয়ার আগে অভ্যন্তরীণ স্ট্যাকের মধ্যে সংরক্ষণ করা হয়। কাজটি শেষ করার পরে, এটি ঠিকানাটি পপ আউট করে এবং এটি প্রোগ্রাম কাউন্টারে বরাদ্দ করে, তারপরে কাজটি পুনরায় শুরু করে। পুনরাবৃত্ত কলের সময়, এটি একাধিকবার ঠিকানা সংরক্ষণ করবে এবং পরবর্তী ফাংশন কল স্টেটমেন্টে চলে যাবে। যদি একটি বেস কেস সংজ্ঞায়িত না করা হয় তবে এটি বারবার পুনরাবৃত্তি হবে এবং স্ট্যাকের মধ্যে ঠিকানা সংরক্ষণ করবে। যদি স্ট্যাকের আর কোনো স্থান না থাকে, তাহলে এটি "অভ্যন্তরীণ স্ট্যাক ওভারফ্লো" হিসাবে একটি ত্রুটি উত্থাপন করবে৷

রিকার্সিভ কলের একটি উদাহরণ হল একটি সংখ্যার ফ্যাক্টরিয়াল খুঁজে বের করা। আমরা দেখতে পাচ্ছি যে একটি সংখ্যার ফ্যাক্টরিয়াল n =n! এটি n * (n-1) এর মতো!, আবার এটি n * (n - 1) * (n - 2)!। সুতরাং যদি ফ্যাক্টরিয়াল একটি ফাংশন হয়, তাহলে এটিকে বারবার বলা হবে, কিন্তু আর্গুমেন্টটি 1 দ্বারা হ্রাস পাবে। যখন আর্গুমেন্টটি 1 বা 0 হবে, তখন এটি 1 ফেরত দেবে। এটি পুনরাবৃত্তির বেস কেস হতে পারে।

উদাহরণ

#include<iostream>
using namespace std;
long fact(long n){
   if(n <= 1)
   return 1;
   return n * fact(n-1);
}
main(){
   cout << "Factorial of 6: " << fact(6);
}

আউটপুট

Factorial of 6: 720

  1. করেসপন্ডেন্স ভিত্তিক ডেটা স্ট্রাকচার

  2. ডেটা স্ট্রাকচারে সংলগ্নতা তালিকা

  3. ডেটা স্ট্রাকচারে ন্যূনতম স্প্যানিং ট্রি

  4. ডাটা স্ট্রাকচারে বাইনারি ট্রি রিপ্রেজেন্টেশন