একদেশে ছিল এক ধার্মিক লোক। লোকটির অনেক আধ্যাত্মিক ক্ষমতা ছিল। একদিন ধার্মিক লোকটি মন্ত্র পড়ে একটি দৈত্য নিয়ে আসল। তারপর লোকটি দৈত্যটিকে
আদেশ করলঃ
“ঠিক তোমার মত অরেকটি দৈত্য নিয়ে আস”। সাথে সাথে হুবুহু প্রথম দৈত্যের মত দ্বিতীয় দৈত্য হাজির হল।দ্বিতীয় দৈত্যটিকে কিছু না বলার পরেও দ্বিতীয় দৈত্যটি “ঠিক তোমার মত অরেকটি দৈত্য নিয়ে আস” – এটিকে আদেশ মনে করে তৃতীয় দৈত্য নিয়ে আসল। একইভাবে তৃতীয় দৈত্যটি “ঠিক তোমার মত অরেকটি দৈত্য নিয়ে আস” – এটিকে আদেশ মনে করে চতুর্থ দৈত্য নিয়ে আসল। এভাবে ধার্মিক লোকটির সামনে একের পর এক দৈত্য আসতে লাগল। একসময় ধার্মিক লোকটি চিৎকার করে বলল-
“থাম”
তারপর সাথে সাথে দৈত্য আসা থেমে গেল।
এখানে একটা ব্যাপার লক্ষ্য করুন, ধার্মিক লোকটি কিন্তু শুধু মাত্র প্রথম দৈত্যটিকে আদেশ করেছিল ঠিক তার মত একটি দৈত্য নিয়ে আসতে। তারপরেও কেন এতগুলো দৈত্য আসল? ধার্মিক লোকটির আদেশে একটু ভুল ছিল। সেটি হলঃ
“ঠিক তোমার মত”
একথাটির কারনে প্রথম দৈত্য যেই দ্বিতীয় দৈত্যটিকে নিয়ে এসেছিল সেটির চিন্তা চেতনা ও স্মৃতি শক্তি সবকিছুই প্রথম দৈত্যের মত। তাই প্রথম দৈত্যের মাথায় যেই আদেশটি ছিল সেই আদেশটি দ্বিতীয় দৈত্যের মাথায় ও চলে আসল। তাই দ্বিতীয় দৈত্যটিকে আদেশ না করার পরেও সে তৃতীয় দৈত্য নিয়ে আসল এবং এইভাবে চলতে থাকল। তর্ক করাই যদি আপনার স্বভাব হয় তাহলে আপনি নিশ্চয়ই প্রশ্ন করবেন – প্রথম দৈত্য যখন দ্বিতীয় দৈত্য নিয়ে আসল তখন প্রথম দৈত্যের মাথায় তো এটাও ছিল যে সে তার আদেশ পূরন করেছে। তাহলে দ্বিতীয় দৈত্যের মাথায় কেন শুধু আদেশ করার স্মৃতিটাই আছে? আদেশ পূরন করার স্মৃতিটা নেই কেন?
লক্ষ্য করুন, প্রথম দৈত্যের মাথায় প্রথমে থাকে আদেশের স্মৃতিটি পরে থাকে আদেশ পূরন করার স্মৃতিটি। ঠিক একইভাবে দ্বিতীয় দৈত্যটির মাথায় প্রথমে থাকে “ঠিক তোমার মত একটি দৈত্য নিয়ে আস” – এ আদেশটি এবং পরে থাকে আদেশ পূরন করার স্মৃতিটি। তাই দ্বিতীয় দৈত্যটির মাথায় প্রথমে যে স্মৃতিটি সক্রিয় হয় সেটি পূরন করার পর পরবর্তি স্মৃতিটির কথা মনে পরে। এভাবে আদেশ পূরন করার স্মৃতিটি মনে পড়ার আগেই আদেশ পূরন হয়ে যায়।
এ গল্পে ধার্মিক লোকটির একটি কথার কারনে একের পর এক দৈত্য আসতেছিল। সেটি হলঃ
“ঠিক তোমার মত”
ঠিক একইভাবে আপনি যখন একটি ফাংশনকে ঠিক ঐ ফাংশনে কল করবেন তখন ফাংশনটি কল হতেই থাকবে। নিচের প্রোগ্রামটি লক্ষ্য করুনঃ
#include<stdio.h>
int main()
{
ghost();
return 0;
}
void ghost()
{
printf("\nI am a ghost ");
ghost();
}
এ প্রোগ্রামটা রান করলে আপনি আউটপুট স্ক্রীনে
I am a ghost
I am a ghost
I am a ghost
……
এভাবে ‘I am a ghost’ লেখাটা বার বার প্রিন্ট হওয়াটা দেখতে পাবেন।এখন দেখা যাক প্রগ্রাম টা কিভাবে কাজ করেছে।
main () ফাংশনের ভেতরে
ghost (); statement টা পাওয়ার পর
void ghost ()
{
printf(“/I am a ghost “);
ghost();
}
ফাংশনটা এক্সিকিউট হওয়া শুরু করবে। ghost() ফাংশনের শুরুতে printf(“/I am a ghost “);লাইনটা এক্সিকিউট হবে।তারপর ghost(); statement এর কারনে ghost() ফাংশনের ভেতরেই ghost() ফাংশনটা কল হবে তাই আবার
‘void ghost ()
{’
এর পরের লাইন printf (“/n I am a ghost”); এক্সিকিউট হবে এবং আবার ghost (); statement টা পাবে এবং একইভাবে printf(“/n I am a ghost”); লাইনটা এক্সিকিউট হবে এবং এভাবে চলতে থাকবে। ঠিক যেভাবে উপরের গল্পে একের পর এক ভুত আসতেছিল একইভাবে এই প্রোগ্রামে ‘I am a ghost’ লেখাটা প্রিন্ট হতেই থাকবে।এই যে একটি ফাংশনের ভেতরে সেই ফাংশনটাকে কল করে ফাংশনটার এক্সিকিউশনের পুনরাবৃতি ঘটানো হচ্ছে একেই বলে Recursion of function আর ঐ ফাংশনটাকে বলে Recursive function
উপরের গল্পে ধার্মিক লোকটি –
‘থাম’ বলে ভূত আসা বন্ধ করেছিল।
ঠিক একইভাবে প্রোগ্রামটাকে কোন শির্তের উপর ভিত্তি করে বন্ধ করতে হবে। যেমনঃ মনে করুন একটি শর্ত হলঃ
‘I am a ghost’ এ লেখাটা ১০ বার প্রিন্ট করতে হবে। তাহলে প্রোগ্রাম টা হবে নিচের মতঃ
#include<stdio.h>
void ghost()
{
static int i=0;
if(i==10)
goto end;
printf("\nI am a ghost %d",++i);
ghost();
end:
;
}
int main()
{
ghost();
return 0;
}
Output
I am a ghost 1
I am a ghost 2
I am a ghost 3
I am a ghost 4
I am a ghost 5
I am a ghost 6
I am a ghost 7
I am a ghost 8
I am a ghost 9
I am a ghost 10
গল্পটি যেখান থেকে সংগ্রহ করা হয়েছে সেই লিঙ্কটি হলঃ click here
আমি আবদুস ছাত্তার। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 10 বছর 3 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 8 টি টিউন ও 11 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 1 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
valo