Recursion হল প্রোগ্রামিংয়ে এমন একটি কৌশল, যেখানে একটি ফাংশন নিজেকেই কল করে। এটি সাধারণত লুপের বিকল্প হিসেবে ব্যবহৃত হয় এবং যখন কোনো কাজকে ছোট ছোট সাবটাস্কে ভাগ করতে হয়, তখন এটি অত্যন্ত কার্যকরী হতে পারে। Control flow বলতে বোঝানো হয়, একটি প্রোগ্রামের মধ্যে কার্যপ্রবাহের নির্দেশ, যেমন কোন ফাংশন কখন কল হবে এবং কীভাবে এক্সপ্রেশনগুলি একে অপরের সাথে যুক্ত হবে। Recursion ব্যবহারের মাধ্যমে এই control flow কিভাবে পরিচালিত হয়, তা নিচে ব্যাখ্যা করা হয়েছে।
১. Recursion কী?
Recursion হল এমন একটি কৌশল, যেখানে একটি ফাংশন নিজেকে পুনরায় কল করে নির্দিষ্ট শর্তে পূর্ণতা অর্জন করার জন্য। Recursion এর মধ্যে দুটি মৌলিক অংশ থাকে:
- Base Case: এটি একটি শর্ত যা ফাংশনটির নিজেকে কল করা থামাতে নির্দেশনা দেয়।
- Recursive Case: এটি এমন একটি শর্ত যেখানে ফাংশনটি নিজের প্রতি কল করে।
২. Recursion এবং Control Flow
Recursion এর মাধ্যমে control flow এমনভাবে পরিচালিত হয় যে, ফাংশনটি নিজেই নিজেকে কল করে পুনরাবৃত্তি সৃষ্টি করে, যতক্ষণ না base case পূর্ণ হয় এবং পুনরাবৃত্তি থেমে যায়। এইভাবে, recursion প্রোগ্রামের execution flow কে ধারাবাহিকভাবে নির্ধারণ করে।
Recursion এর মাধ্যমে Control Flow উদাহরণ:
ধরা যাক, আমরা একটি সাধারণ factorial ফাংশন তৈরি করতে চাই। Factorial এর ধারণা হলো, একটি সংখ্যা n এর ফ্যাক্টরিয়াল হলো n * (n-1) * (n-2) * ... * 1।
Factorial ফাংশনের উদাহরণ (Recursion দিয়ে):
(defun factorial (n)
(if (<= n 1)
1 ; base case: factorial(1) = 1
(* n (factorial (- n 1))))) ; recursive case: n * factorial(n-1)এখানে:
- Base Case: যখন
n1 এর সমান বা ছোট হয়, তখন ফাংশন 1 রিটার্ন করে এবং recursion থেমে যায়। - Recursive Case: যখন
n > 1হয়, তখন ফাংশন নিজেকে কল করে এবংn * (n-1)এর জন্য recursion তৈরি হয়।
Control Flow:
- ফাংশনটি
factorial(5)কল করলে, এটি নিজেকে কল করেfactorial(4)এর জন্য। factorial(4)কল হলে, এটি আবারfactorial(3)কল করে।- এভাবে
factorial(1)পর্যন্ত recursion চলতে থাকে। - যখন
factorial(1)পৌঁছায়, তখন base case ট্রিগার হয় এবং 1 রিটার্ন হয়। - এরপর, ফাংশনগুলি উল্টো পথে আসতে শুরু করে, যেমন
factorial(2)থেকে শুরু করেfactorial(5)পর্যন্ত।
নির্দিষ্ট ইনপুটের জন্য Control Flow:
(factorial 5)factorial(5)কল →5 * factorial(4)factorial(4)কল →4 * factorial(3)factorial(3)কল →3 * factorial(2)factorial(2)কল →2 * factorial(1)factorial(1)কল → 1 (Base Case)
পরে এগুলি উল্টো দিকে চলে:
factorial(2)→2 * 1 = 2factorial(3)→3 * 2 = 6factorial(4)→4 * 6 = 24factorial(5)→5 * 24 = 120
ফলস্বরূপ, factorial(5) এর মান হবে 120।
৩. Recursion এবং Control Flow: কিভাবে কাজ করে?
- Recursion স্ট্যাক: প্রতিটি পুনরাবৃত্তি ফাংশনের একটি নতুন stack frame তৈরি করে, যা নতুন ইনপুট এবং লোকাল ভ্যালু ধারণ করে। প্রতিটি নতুন কলের জন্য stack এর গভীরতা বাড়ে এবং base case পৌঁছানো পর্যন্ত নতুন কল চলে। এর পর, প্রতিটি কল উল্টো দিকে চলে এবং ফাংশনের মান রিটার্ন করে।
- Flow Control: Recursion ব্যবহারের মাধ্যমে control flow এমনভাবে পরিচালিত হয় যে প্রতিটি কল পরবর্তী কলের উপর নির্ভরশীল, এবং একটি শর্ত (base case) পূর্ণ না হওয়া পর্যন্ত কার্যপ্রবাহ চলতে থাকে। এটি অনেক ক্ষেত্রে লুপের চেয়ে সোজা এবং কার্যকরী হয়।
- ক্লিয়ার কোড এবং সহজতা: Recursion অনেক সময় কোডের জটিলতা কমায়, কারণ এটি সমস্যা ভাগ করে দিয়ে ছোট ছোট সাবটাস্কে বিভক্ত করে। উদাহরণস্বরূপ, গাছের মধ্য দিয়ে ট্রাভার্স, ফিবোনাচ্চি সিরিজ, এবং বিভিন্ন অ্যালগরিদম গুলির ক্ষেত্রে recursion একটি খুবই কার্যকরী কৌশল।
৪. উপসংহার
Recursion এর মাধ্যমে control flow পরিচালনা করার প্রধান সুবিধা হলো, এটি একটি সমস্যা ছোট ছোট সাবটাস্কে ভাগ করে এবং পুনরাবৃত্তি করে তা সমাধান করতে সহায়তা করে। Base case এর মাধ্যমে recursion থেমে যায় এবং ফাংশনগুলো একে একে রিটার্ন করা শুরু করে, যা মূল কাজ সম্পন্ন হয়। এটি কোডে পরিষ্কারতা এবং সহজতা আনে, এবং অনেক ধরনের সমস্যা সহজেই সমাধান করা যায় recursion ব্যবহার করে।
Read more