Recursive Functions হল এমন ফাংশন যা নিজেকে কল করে। এটি সমস্যাগুলি সমাধানের একটি কার্যকরী এবং সহজ উপায়, যেখানে একটি বড় সমস্যা ছোট ছোট উপ-সমস্যায় বিভক্ত করা হয়। রিকারশন সাধারণত বেস কেস এবং রিকার্সিভ কেসের মধ্যে বিভক্ত হয়।
১. Recursive Functions এর ধারণা
১.১ বেস কেস
বেস কেস হল সেই শর্ত যা রিকারশনকে থামায়। এটি নিশ্চিত করে যে ফাংশনটি কখনো না কখনো থামবে, অন্যথায় এটি অবিরত কল হতে থাকবে এবং স্ট্যাক ওভারফ্লো ঘটাতে পারে।
১.২ রিকার্সিভ কেস
রিকার্সিভ কেস হল সেই অংশ যেখানে ফাংশনটি নিজেকে কল করে। এটি সমস্যাটিকে ছোট ছোট অংশে বিভক্ত করে এবং বেস কেসের দিকে এগিয়ে নিয়ে যায়।
২. উদাহরণস্বরূপ Recursive Functions
২.১ ফ্যাক্টরিয়াল ফাংশন
ফ্যাক্টরিয়াল হল একটি ক্লাসিকাল উদাহরণ। n! = n * (n - 1)! এবং 0! = 1।
#include <stdio.h>
// Factorial function using recursion
int factorial(int n) {
// Base case
if (n == 0) {
return 1; // 0! is 1
}
// Recursive case
return n * factorial(n - 1); // n! = n * (n-1)!
}
int main() {
int number = 5;
printf("Factorial of %d is %d\n", number, factorial(number));
return 0;
}
২.২ ফিবোনাচ্চি ফাংশন
ফিবোনাচ্চি সংখ্যা F(n) = F(n-1) + F(n-2) এবং F(0) = 0, F(1) = 1।
#include <stdio.h>
// Fibonacci function using recursion
int fibonacci(int n) {
// Base cases
if (n == 0) {
return 0; // F(0) is 0
} else if (n == 1) {
return 1; // F(1) is 1
}
// Recursive case
return fibonacci(n - 1) + fibonacci(n - 2); // F(n) = F(n-1) + F(n-2)
}
int main() {
int number = 6;
printf("Fibonacci of %d is %d\n", number, fibonacci(number));
return 0;
}
৩. Recursive Functions এর প্রয়োগ
৩.১ ডাটা স্ট্রাকচার
- গাছ এবং গ্রাফের ট্রাভার্সাল: গাছের উচ্চতা নির্ধারণ, ইন-অর্ডার ট্রাভার্সাল ইত্যাদিতে রিকারশন ব্যবহৃত হয়।
৩.২ পাটিগণিত সমস্যার সমাধান
- সমন্বয় এবং প্রতিস্থাপন: কিছু সমস্যায়, যেখানে বিভিন্ন সমন্বয় তৈরি করতে হয়, রিকারশন ব্যবহৃত হয়।
৩.৩ অ্যালগরিদম
- ডাইকস্ট্রার অ্যালগরিদম: নেটওয়ার্কে সবচেয়ে সংক্ষিপ্ত পথ খুঁজতে রিকারশন ব্যবহৃত হয়।
৩.৪ ব্যাকট্র্যাকিং
- মেইজ সমস্যা: মেইজে সবচেয়ে কম পথে পৌঁছানোর জন্য ব্যাকট্র্যাকিং এবং রিকারশন ব্যবহার করা হয়।
Read more