সি প্রোগ্রামিং রিকার্সন -c programming recursion
সি প্রোগ্রামিং রিকার্সন
যে ফাংশন নিজেই নিজেকে কল(call) করে তাকে বলা হয় রিকার্সিভ(recursive) ফাংশন এবং এই কৌশলকে বলা হয় রিকার্সন(recursion)।
রিকার্সন কিভাবে কাজ করে?
void recurse() { ... .. ... recurse(); ... .. ... } int main() { ... .. ... recurse(); ... .. ... }
প্রতিবন্ধকতা সৃষ্ট করে এমন কিছু কন্ডিশনের দেখা না পাওয়া পর্যন্ত রিকার্সন চলতেই থাকে।
অসীম রিকার্সনকে বাধা দেওয়ার জন্য if...else স্টেটমেন্ট অথবা এধরনের অন্য কোনো স্টেটমেন্ট ব্যবহার করা যেতে পারে যেখানে এক অংশ রিকার্সিভ হবে, কিন্তু অন্যান্য অংশ রিকার্সিভ হবে না।
উদাহরনঃ রিকার্সন ফাংশন
//রিকার্সন ব্যবহার করে স্বাভাবিক সংখ্যা যোগের জন্য প্রোগ্রাম
#include <stdio.h>
int sum(int num);
int main()
{
int number, result;
printf("Enter a positive integer: ");
scanf("%d", &number);
result = sum(number);
printf("sum=%d", result);
}
int sum(int num)
{
if (num!=0)
// sum() ফাংশন নিজেই নিজেকে কল করে
return num + sum(num-1);
else
return num;
}
আউটপুট
Enter a positive integer: 3 sum= 6
উপরের প্রোগ্রামে number ভ্যারিয়েবল sum()
ফাংশনের মধ্যে দিয়ে আর্গুমেন্ট হিসাবে অতিক্রম হয় এবং main()
ফাংশন থেকে sum()
ফাংশন প্রাথমিকভাবে কল(call) হয়।
ধরুন, num এর প্রাথমিক ভ্যালু 3। পরবর্তী ফাংশন কলে sum()
ফাংশনের মধ্য দিয়ে 2 অতিক্রম করানো হয়। num এর ভ্যালু 0 এর সমান না হওয়া পর্যন্ত এই প্রক্রিয়া চলতে থাকে।
যখন num এর ভ্যালু 0 এর সমান হয় তখন if কন্ডিশন ব্যার্থ হয় এবং else অংশ এক্সিকিউশন হয়ে যোগফল main()
ফাংশনের কাছে রিটার্ন করে।
রিকার্সনের সুবিধা এবং অসুবিধা
রিকার্সন প্রোগ্রামকে সহজ এবং স্বচ্ছ রাখে। রিকার্সন ব্যবহার করে সকল এলগরিদমকে পৌনঃপুনিকভাবে(recursively) ডিফাইন্ড করা যেতে পারে। ফলে ইহা বুঝা এবং প্রমাণ করা উভয়ই সহজ হয়ে যায়।
আপনার প্রোগ্রামের মুখ্য বিষয় যদি দ্রুতগতি সম্পন্ন হয় তাহলে রিকার্সন না ব্যবহার করাই ভাল। কারণ রিকার্সন মেমোরির অনেক জায়গা দখল করে এবং সাধারণত ধীর গতির হয়। ইহার পরিবর্তে আপনি লুপ ব্যবহার করতে পারেন।