রিকার্শন হলো মূলত একটি ফাংশনের নিজেই নিজেকে কল করার ঘটনা । নিচের উদাহরণটি লক্ষ্য করোঃ
1#include <stdio.h>
2int sum(int i) {
3 if (i > 0) {
4 printf("Value of i is: %d\n", i);
5 return i + sum(i - 1);
6 } else {
7 return 0;
8 }
9}
10
11int main() {
12 int result = sum(10);
13 printf("\n%d\n", result);
14 return 0;
15}
16এ প্রোগ্রামটি রান করলে নিচের মতো আউটপুট আসবেঃ
Value of i is: 10
Value of i is: 9
Value of i is: 8
Value of i is: 7
Value of i is: 6
Value of i is: 5
Value of i is: 4
Value of i is: 3
Value of i is: 2
Value of i is: 1
55
কিন্তু এখানে আসলে কীভাবে কী হলো? প্রথমে ফাংশনের মধ্যে পাঠানো হলো । সেখানে একবার এই মান প্রিন্ট হলো । এরপরে লাইন ৫ এ গিয়ে কল করা হলো । এই লাইনের মান দাঁড়ালো, ।
তো এবার এ আবার পাঠানো হলো । সেটিও একবার প্রিন্ট হলো । এবার এই পুরো এর মান দাঁড়ালো । আবার আগে থেকে যোগ অবস্থায় ছিলো । তাই পুরো লাইনটির মান দাঁড়ালো
এরপরে এর মান হবে । তাই পুরো টার মান হবে । এভাবে চলতে থাকবে যতক্ষন পর্যন্ত না এর মান হচ্ছে ।
যখন এর মান হয়ে গেলো, তখন আর ফাংশন কে কল করা হলো না, তাই রিকার্শন এখানে বন্ধ হয়ে গেলো । তাই পুরো ফাংশনটির মান দাঁড়ালো । এভাবে আমরা রিকার্শন ব্যবহার করে থেকে পর্যন্ত খুব সহজেই যোগ করে ফেললাম ।
আগের উদাহরণে আমরা এর মান একটা নির্দিষ্ট ভ্যালু পর্যন্ত কমিয়েছি এবং রিকার্শনকে এর মাধ্যমেই নিয়ন্ত্রণ করেছি । কিন্তু ছোটোখাটো ভুলের কারণে এই নিয়ন্ত্রণ নষ্ট হয়ে যেতে পারে । নিচের কোডটি দেখোঃ
1#include <stdio.h>
2int sum(int i) {
3 if (i > 0) {
4 printf("Value of i is: %d\n", i);
5 return i + sum(i + 1);
6 } else {
7 return 0;
8 }
9}
10
11int main() {
12 int result = sum(10);
13 printf("\n%d\n", result);
14 return 0;
15}
16এটি আগের কোডটাই, শুধু লাইন ৫ এ আমরা এর জায়গায় দিয়েছি । এর ফলে এটি একটি Endless Loop এর মধ্যে পড়ে যাবে এবং সেকেন্ডের মধ্যেই প্রোগ্রামটি তার বরাদ্দকৃত সব মেমোরি ব্যবহার করে ফেলবে এবং এরর দিবে । তাই রিকার্শন ব্যবহারে একটু সতর্ক থাকা প্রয়োজন ।
