ধাপে ধাপে সি ল্যাঙ্গুয়েজ শিখুন(Part 8)

কেমন আছেন সবাই। আশা করি আল্লাহর রহমতে ভাল আছেন। আজ আমরা সি এর অতি গুরুত্বপূর্ন ব্যাপার নিয়ে আলোচনা করব।আর তা হল Recursion.

Recursion কি?

যখন কোন একটি ফাংশন এর মধ্য হতেই ঐ ফাংশনটিকে আবার কল করা হয় যতক্ষন না কোন স্পেসিফিক কন্ডিশন পূরন না হচ্ছে, তখন ঐ ধরনের কলকে recursion এবং ঐ ফাংশনটিকে recursive function বলা হয়। প্রোগ্রাম এর ক্ষেত্রে recursion এর ব্যবহার কোড অনেক ছোট ও সহজ করে তোলে। recursion যদিও সহজ তবে তা আয়ত্ব করতে এবং সঠিক প্রয়োগ ঘটাতে প্রয়োজন অনেক অনেক প্র্যাকটিস। আজ আমরা অল্প কিছু প্রবলেম recursion এর মাধ্যমে করব এবং তা ভালভাবে বোঝার চেস্টা করব।

Recursion এর উদাহরনঃ

এবার আমরা recursive function এর প্রথম প্রবলেমটা করব। ম্যাথম্যাটিক্স নিয়ে যাদের কিছুটা ধারনা আছে তারা অবশ্যই factorial সম্পর্কে জেনে থাকবেন। এখানে একবার উল্লেখ করছি।কোন সংখ্যার factorial হল 1 থেকে ঐ নাম্বার পর্যন্ত সকল সংখ্যার গুনফল।

n! = 1*2*3*4*....*n

3! = 1*2*3 = 6

5! = 1*2*3*4*5 = 120

exception: 0! = 1

এবার যেকোন নাম্বার এর factorial বের করার জন্য আমরা loop ব্যবহার করে বের করতে পারি।

যেমনঃ

for( i=res=1 ; i<=n ; i++ )
res=res*i;

printf(" factorial of %d : %d\n" , n, res );

উপরের কোডটি দিয়ে আমরা n এর factorial বের করতে পারি।

এই for loop এর কোডটা আমরা recursion এর মাধ্যমে করতে পারি। উল্লেখ্য, আমরা এখন যে উদাহরনটি করছি তা মূলত recursion বোঝার জন্য। এই প্রোগ্রাম দেখে হয়ত মনে হতে পারে recursion এর কি দরকার। recursion এর আরও অনেক প্রোগ্রাম আমরা দেখব পরে।

যখন কোন ফাংশন কল করা হয়, তখন যেখান থেকে কল করা হয়েছে সেখান থেকে সরাসরি জাম্প করে ফাংশন এ চলে যায়। আর তারপর ঐ ফাংশন এর কাজ শেষ হলে আবার কল এর জায়গায় ফিরে আসে। আর recursion এ যেহেতু একই ফাংশন হতে নিজেকেই আবার কল হয়, তাই ফাংশন কল শুধু depth এ যেতে থাকে।

নিচের ছবিটিতে উপরের উদাহরটি কিভাবে execute হচ্ছে তা দেখানো হল।

যখন প্রোগ্রামটি depth এ যেতে যেতে 0(zero) এর জন্য এক্সিকিউট হচ্ছে তখন ঐ ফাংশন এর স্পেসিফিক কন্ডিশন পূরন হওয়ায় তা ঐখান থেকে return করে যেখান থেকে কল করা হয়েছিল সেখানে ফিরে আসে।

এবার recursion apply করে আরেকটি প্রবলেম করি। আপনি একটি নাম্বার ইনপুট নিয়ে 1 থেকে ঐ নাম্বার পর্যন্ত প্রিন্ট করব এবং এদের যোগফল বের করব।

আপনারা যদি এর আগের উদাহরনটি কিভাবে কাজ করছে বুঝতে পারেন, ঠিক সেভাবে এটাও depth এ গিয়ে কিভাবে কাজ করছে তা ধরতে পারবেন।

আরেকটি উদাহরন করি। আপনি কোন স্ট্রিং এর reverse করবেন কোন loop ছাড়া। এটি recursion দিয়ে সহজে করা যায়।

এইটার সমাধান করার মূল কনসেপ্টটা হল যখন depth এ যেতে যেতে '\০' বা null character পাবে তখন return করার সময় একটি করে ক্যারেক্টার প্রিন্ট করবে। আর তার ফলে স্ট্রিংটিও রিভার্স অর্ডার এ প্রিন্ট হবে।

recursion ব্যবহার করে অনেক ধরনের কাজ খুব সহজে করা যায়। বিভিন্ন algorithm যেমনঃ sorting, searching প্রভৃতি ক্ষেত্রে recursion এর ব্যপক ব্যবহার। এখানে আমি মূলত recursion এর ক্ষেত্রে কি ঘটে তা দেখানোর চেস্টা করেছি। বিভিন্ন algorithm নিয়ে পরবর্তীতে আলোচনা করলে আবারও recursion তুলে ধরব।

এবার recursion দিয়ে একটি প্রবলেম করুন।

প্রবলেমঃ একটি integer array হতে highest number টি  বের করে প্রিন্ট করুন।

আমার টিউন দেখে কেউ যদি উপকৃত হন, তবে আমার কষ্ট সার্থক হচ্ছে বলে মনে করি। আর একটি কথা। আপনাদের মতামত, অভিমত কিংবা সি নিয়ে যেকোন সমস্যা আমার সাথে শেয়ার করুন।

চাইলে আমাকে email ও করতে পারেন এই ঠিকানায়ঃ [email protected]

সি নিয়ে আমার পূর্ববর্তী টিউটোরিয়ালগুলো দেখুনঃ

ধাপে ধাপে সি ল্যাঙ্গুয়েজ শিখুন(Part 1)

ধাপে ধাপে সি ল্যাঙ্গুয়েজ শিখুন(Part 2)

ধাপে ধাপে সি ল্যাঙ্গুয়েজ শিখুন(Part 3)

ধাপে ধাপে সি ল্যাঙ্গুয়েজ শিখুন(Part 4)

ধাপে ধাপে সি ল্যাঙ্গুয়েজ শিখুন(Part 5)

ধাপে ধাপে সি ল্যাঙ্গুয়েজ শিখুন(Part 6)

ধাপে ধাপে সি ল্যাঙ্গুয়েজ শিখুন(Part 7)

Level 0

আমি বাকের। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 14 বছর 2 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 12 টি টিউন ও 81 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 0 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।


টিউনস


আরও টিউনস


টিউনারের আরও টিউনস


টিউমেন্টস

খুবই গুরুত্বপুর্ন বিষয় নিয়ে আলোচনা করেছেন।
অনেক অনেক ধন্যবাদ নিয়মিত চালিয়ে যাওয়ার জন্য।

    জানিনা আজকের টিউনে ব্যাপারটা কতটুকু বোঝাতে পেরেছি। তবে এটা ঠিক, আজকের বিষয়টি যদি কেউ ভালভাবে আত্তস্থ করতে পারে, তবে সি নয়, প্রোগ্রামিং এই সে একধাপ এগিয়ে গেল। ধন্যবাদ আপনাকে।

খুবই ভাল লাগতাছে। আমি পলিটেকনিকের ৩ বর্ষের ছাত্র এই পর্বে প্রোগ্রাম ইন সি আছে আনেক কাজে লাগবে । চালিয়ে যান

খুবই ভাল লাগতাছে। আমি পলিটেকনিকের ৩ বর্ষের ছাত্র এই পর্বে প্রোগ্রাম ইন সি আছে আনেক কাজে লাগবে । চালিয়ে যান
DIGITAL NETRAKONA
TOTAL WEB GUIDE
http://www.digitalnetrakona.blogspot.com

    আপনার কাজে লাগবে জেনে ভাল লাগল। ধন্যবাদ।

Level 0

ভাই আমি বুঝি আর না বুঝি, আপনার ধারা বাহিক গুলো আমি নিয়মিত পড়ি এবং শিখার চেষ্টা করবো। ধন্যবাদ আপনাক।

    আপু, চেস্টা করলে সবই সম্ভব, সি এর সবচেয়ে শক্তিশালী দিক হল এর কোডিং সিনটেক্স অনেক সহজ। এই ল্যাঙ্গুয়েজ দিয়ে আপনি যতটা না সি শিখবেন, প্রোগ্রামিং শিখবেন তার চেয়ে অনেক বেশি। তখন আপনি অন্য যে প্রোগ্রামিং ল্যাঙ্গুয়েজ এই কনভার্ট হোন না কেন, তা অতি সহজ মনে হবে।

    বাকের ভাই এর বেজ পিএইচপি শেখায়ও কি সাহায্য করবে?

    অবশ্যই। আপনি পিএইচপি এর বই খুললেই loop,condition,function,structure সবই পাবেন। সিনটেক্স হয়ত আলাদা কিন্তু কনসেপ্ট একই।

    বাকের ভাইয়ের সাথে একমত।

আমিও ভাই সি ল্যঙ্গুয়েজ বুঝিনা কিন্তু আপনার চেষ্টাকে আমি আমি অভিনন্দন জানাই,অনেকে অবস্যই উপকৃত হচ্ছে আপনার টিউন থেকে,আমিও সময় পেলে চেষ্টা করব,ধন্যবাদ টিউনের জন্য।

এগিয়ে জান, আমরা আছি। নতুন কোন টিউন নেই কেন??