রিকার্সন

মেথড এবং ফাংশন - জাভা প্রোগ্রামিং (Java Programming) - Computer Programming

336

রিকার্সন (Recursion) হলো প্রোগ্রামিংয়ের একটি কৌশল, যেখানে একটি ফাংশন বা মেথড নিজেই নিজেকে কল করে কাজ সম্পন্ন করে। রিকার্সনের মাধ্যমে জটিল সমস্যাকে ধাপে ধাপে সহজ এবং ছোট আকারে ভাগ করে সমাধান করা যায়।

রিকার্সনের দুটি গুরুত্বপূর্ণ অংশ রয়েছে:

  1. বেস কেস (Base Case): এটি এমন একটি অবস্থা যেখানে ফাংশনটি নিজেই নিজেকে আর কল করবে না এবং সমাধান প্রদান করবে।
  2. রিকার্সিভ কেস (Recursive Case): এটি এমন অংশ যেখানে ফাংশনটি আবার নিজেকে কল করে এবং ছোট আকারে সমস্যার সমাধান খুঁজে পায়।

রিকার্সন কিভাবে কাজ করে?

রিকার্সিভ ফাংশন প্রতিবার নিজেকে কল করার সময় সমস্যাকে ছোট করে এবং বেস কেসে পৌঁছানো পর্যন্ত কল করে যেতে থাকে। যখন বেস কেসে পৌঁছে যায়, তখন কলগুলো শেষ হয়ে যায় এবং প্রতিটি স্তরে ফলাফল প্রদান করতে থাকে।


উদাহরণ ১: ফ্যাক্টরিয়াল গণনা

ফ্যাক্টরিয়াল হলো একটি পূর্ণসংখ্যার গুণফল, যা ঐ সংখ্যা থেকে ১ পর্যন্ত গুণ করে বের করা হয়। যেমন, 5! = 5 * 4 * 3 * 2 * 1 = 120

রিকার্সিভ ফাংশন ব্যবহার করে ফ্যাক্টরিয়াল গণনা

public class Factorial {
    // রিকার্সিভ ফাংশন
    public static int factorial(int n) {
        if (n == 0) {
            return 1; // বেস কেস: n যদি ০ হয়, তাহলে ফ্যাক্টরিয়াল হবে ১
        } else {
            return n * factorial(n - 1); // রিকার্সিভ কেস: n * (n-1)!
        }
    }

    public static void main(String[] args) {
        int number = 5;
        int result = factorial(number);
        System.out.println("Factorial of " + number + " is: " + result);
    }
}

আউটপুট:

Factorial of 5 is: 120

ব্যাখ্যা:

  • এখানে factorial মেথড নিজেই নিজেকে কল করছে।
  • factorial(5) থেকে শুরু করে এটি factorial(4), factorial(3) এভাবে ক্রমান্বয়ে বেস কেসে পৌঁছে যায়।
  • বেস কেসে factorial(0) কল করে ১ প্রদান করা হয় এবং প্রতিটি স্তরে ফলাফল গুণফল হিসেবে ফিরে আসতে থাকে।

উদাহরণ ২: ফিবোনাচ্চি সিরিজ

ফিবোনাচ্চি সিরিজ হলো এমন একটি সংখ্যা ক্রম যেখানে প্রতিটি সংখ্যা আগের দুইটি সংখ্যার যোগফল। যেমন: 0, 1, 1, 2, 3, 5, 8, ...

রিকার্সিভ ফাংশন ব্যবহার করে ফিবোনাচ্চি সিরিজ

public class Fibonacci {
    // রিকার্সিভ ফাংশন
    public static int fibonacci(int n) {
        if (n <= 1) {
            return n; // বেস কেস: যদি n ০ বা ১ হয়, তাহলে n রিটার্ন কর
        } else {
            return fibonacci(n - 1) + fibonacci(n - 2); // রিকার্সিভ কেস
        }
    }

    public static void main(String[] args) {
        int terms = 7;
        System.out.print("Fibonacci Series: ");
        for (int i = 0; i < terms; i++) {
            System.out.print(fibonacci(i) + " ");
        }
    }
}

আউটপুট:

Fibonacci Series: 0 1 1 2 3 5 8

ব্যাখ্যা:

  • এখানে fibonacci মেথড নিজেই নিজেকে কল করে প্রতিটি ফিবোনাচ্চি সংখ্যা বের করে।
  • বেস কেসে n যদি ০ বা ১ হয়, তাহলে সেই মান রিটার্ন করে।
  • রিকার্সিভ কেসে fibonacci(n - 1) + fibonacci(n - 2) কল করে ফিবোনাচ্চি সংখ্যা বের করা হয়।

রিকার্সনের সুবিধা

  1. কোড ছোট ও পরিষ্কার রাখা: রিকার্সন ব্যবহার করলে জটিল সমস্যার সমাধানকে সহজ ও সংক্ষিপ্ত করা যায়।
  2. জটিল সমস্যার সমাধানে কার্যকর: অনেক জটিল সমস্যার সমাধান রিকার্সন ব্যবহার করে সহজে করা যায়, যেমন ট্রি ট্রাভার্সাল, গ্রাফ, এবং ব্যাকট্র্যাকিং।

রিকার্সনের সীমাবদ্ধতা

  1. স্ট্যাক ওভারফ্লো (Stack Overflow): অনেক বেশি রিকার্সন কল হলে মেমোরি পূর্ণ হয়ে স্ট্যাক ওভারফ্লো সমস্যা হতে পারে।
  2. ধীরগতি (Performance Issue): রিকার্সিভ সমাধান কখনো কখনো ইটারেটিভ সমাধানের তুলনায় ধীর হতে পারে। যেমন, ফিবোনাচ্চি সিরিজের সাধারণ রিকার্সিভ সমাধানে অনেকবার একই ফাংশন কল হয়, যা সময় নষ্ট করে।

রিকার্সন বনাম ইটারেশন

বৈশিষ্ট্যরিকার্সনইটারেশন
সারলীকরণসমস্যা ছোট ছোট অংশে ভাগ করে সমাধান করেলুপ ব্যবহার করে সমাধান করা
মেমোরি ব্যবহারস্ট্যাক ব্যবহার করেস্ট্যাক ব্যবহার করে না
গতিতুলনামূলক ধীরদ্রুত

সারসংক্ষেপ

  • রিকার্সন হলো একটি ফাংশন যা নিজেই নিজেকে কল করে।
  • এটি দুটি অংশ নিয়ে কাজ করে: বেস কেস (সমাধান শেষ করার শর্ত) এবং রিকার্সিভ কেস (ফাংশন পুনরায় কল করার শর্ত)।
  • জটিল সমস্যার সমাধানে রিকার্সন কার্যকর হলেও, মেমোরি ব্যবহারের কারণে এটি স্ট্যাক ওভারফ্লো সমস্যা সৃষ্টি করতে পারে।

রিকার্সন ব্যবহারে প্রোগ্রাম সংক্ষিপ্ত ও সহজবোধ্য করা যায়, তবে বড় সমস্যার ক্ষেত্রে মেমোরি ব্যবহারের সীমাবদ্ধতা মনে রাখা জরুরি।

Content added By
Promotion

Are you sure to start over?

Loading...