Computer Programming Recursion এবং Recursive Procedures গাইড ও নোট

313

রিকারশন এবং রিকার্সিভ প্রসিডিউরস (Recursion and Recursive Procedures in Fortran)

রিকারশন (Recursion) হলো একটি প্রোগ্রামিং কৌশল যেখানে একটি ফাংশন বা প্রসিডিউর নিজেই নিজেকে কল করে। এটি বিশেষভাবে উপকারী যখন সমস্যার সমাধানটি ছোট উপসমস্যায় বিভক্ত করা যায় এবং উপসমস্যাগুলির সমাধান একে অপরের সাথে সম্পর্কিত থাকে। ফোরট্রান-এ রিকারশন ব্যবহার করা হয় সাধারণত গণনা সম্পর্কিত বা সমস্যাগুলি পুনরাবৃত্তির মাধ্যমে সমাধান করতে।

১. রিকারশন কী এবং এটি কিভাবে কাজ করে?

রিকারশন হল একটি প্রক্রিয়া যেখানে একটি ফাংশন বা প্রসিডিউর নিজেই নিজেকে কল করে। একটি রিকার্সিভ ফাংশন সাধারণত একটি "বেস কেস" থাকে, যা প্রোগ্রামটির পুনরাবৃত্তি থামানোর শর্ত নির্ধারণ করে। বেস কেস ছাড়া, এটি নিজেই নিজেকে পুনরায় কল করে সমস্যাটির smaller version সমাধান করে।

২. রিকার্সিভ ফাংশন (Recursive Function)

রিকারসিভ ফাংশন বা প্রসিডিউর সাধারণত দুটি অংশ নিয়ে গঠিত:

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

৩. রিকারশন উদাহরণ: ফ্যাক্টোরিয়াল (Factorial) ফাংশন

ফ্যাক্টোরিয়াল একটি সাধারণ গাণিতিক সমস্যা যেখানে একটি সংখ্যার ফ্যাক্টোরিয়াল বের করতে হয়। একটি সংখ্যা n এর ফ্যাক্টোরিয়াল হল n * (n-1) * (n-2) * ... * 1। রিকারশন ব্যবহার করে এটি সমাধান করা যেতে পারে।

উদাহরণ: ফ্যাক্টোরিয়াল ফাংশন (Recursive Factorial Function)

program factorial
    integer :: result, number

    print *, "Enter a number:"
    read *, number

    result = factorial(number)
    print *, "Factorial of ", number, " is ", result

contains

    function factorial(n)
        integer :: factorial
        integer, intent(in) :: n

        if (n <= 1) then
            factorial = 1
        else
            factorial = n * factorial(n-1)  ! Recursive call
        end if
    end function factorial

end program factorial

এখানে:

  • factorial ফাংশনটি নিজেকে কল করে, যখন n > 1। যখন n <= 1, তখন এটি বেস কেস হিসাবে ১ ফেরত দেয়।
  • এই রিকারসিভ ফাংশনটি n এর ফ্যাক্টোরিয়াল বের করতে কাজ করে।

কাজের প্রক্রিয়া:

  1. যদি ইনপুট 5 হয়, তখন factorial(5) হবে 5 * factorial(4)
  2. এরপর factorial(4) হবে 4 * factorial(3)
  3. এভাবে চলে যাবে, এবং শেষে factorial(1) ১ ফেরত দেবে, যা বেস কেস।

৪. রিকারসিভ প্রসিডিউর (Recursive Procedure)

ফোরট্রানে ফাংশনের পাশাপাশি প্রসিডিউরেও রিকারশন ব্যবহার করা যায়। রিকারসিভ প্রসিডিউর সাধারণত একটি নির্দিষ্ট কাজ সম্পাদন করতে থাকে এবং সেই কাজটি অন্য একটি পুনরাবৃত্তি করতে পারে।

উদাহরণ: ফিবোনাচ্চি সিরিজ (Recursive Fibonacci Sequence)

ফিবোনাচ্চি সিরিজে প্রতিটি সংখ্যা পূর্ববর্তী দুইটি সংখ্যার যোগফল হয়। অর্থাৎ, F(n) = F(n-1) + F(n-2)

program fibonacci
    integer :: n, result

    print *, "Enter a number:"
    read *, n

    result = fibonacci(n)
    print *, "Fibonacci of ", n, " is ", result

contains

    function fibonacci(n)
        integer :: fibonacci
        integer, intent(in) :: n

        if (n == 0) then
            fibonacci = 0
        elseif (n == 1) then
            fibonacci = 1
        else
            fibonacci = fibonacci(n-1) + fibonacci(n-2)  ! Recursive call
        end if
    end function fibonacci

end program fibonacci

এখানে:

  • fibonacci(n) ফাংশনটি নিজেই n-1 এবং n-2 এর ফিবোনাচ্চি মান ফিরিয়ে আনার জন্য নিজেকে কল করে।

কাজের প্রক্রিয়া:

  1. fibonacci(5) হবে fibonacci(4) + fibonacci(3)
  2. এটি আরো ছোট আকারে কল হতে থাকে, এবং অবশেষে fibonacci(1) এবং fibonacci(0) ১ এবং ০ ফেরত দেয়, যা বেস কেস।

৫. রিকারশন এবং মেমরি ব্যবস্থাপনা

  • রিকারশন ব্যবহারের সময় ফাংশন বা প্রসিডিউরের প্রতিটি কল স্ট্যাকের মধ্যে মেমরি বরাদ্দ করে, যার ফলে কিছু সীমাবদ্ধতা থাকতে পারে। যখন খুব গভীর রিকারশন হয় (যেমন ইনপুট সংখ্যা বড় হলে), এটি স্ট্যাক ওভারফ্লো বা মেমরি সমস্যার সৃষ্টি করতে পারে।
  • তাই, খুব গভীর রিকারশন ব্যবহার করা এড়ানো উচিত, বা পিটিএম (tail recursion) ব্যবহার করা উচিত যেখানে রিকারশনটি ফাংশনের শেষ লাইন হিসাবে থাকে, এবং প্রয়োজনীয় মেমরি কম ব্যবহৃত হয়।

উপসংহার

ফোরট্রানে রিকারশন একটি শক্তিশালী কৌশল যা পুনরাবৃত্তিক সমস্যা সমাধান করতে সহায়ক। রিকার্সিভ ফাংশন বা প্রসিডিউর একটি সমস্যা ছোট অংশে ভেঙে সমাধান করতে সক্ষম, কিন্তু এটি ব্যবহার করার সময় বেস কেস সঠিকভাবে নির্ধারণ করা গুরুত্বপূর্ণ যাতে অবিরাম রিকারশন থেকে এড়ানো যায়।

Content added By
Promotion

Are you sure to start over?

Loading...