রিকার্সন ১ম পর্ব

http://www.techsharif.com/category/%E0%A6%B0%E0%A6%BF%E0%A6%95%E0%A6%BE%E0%A6%B0%E0%A7%8D%E0%A6%B8%E0%A6%A8/আমার প্রথম স্কুলে ভর্তি পরীক্ষা , ১৯৯৬ সালের ডিসেম্বর মাস । বেবী ক্লাস এ ভর্তির মৌখিক পরীক্ষা । স্পষ্ট মনে আছে আমাকে একটি যোগ করতে দেওয়া হয়েছিলো, যার দুটি সংখ্যাই ছিলো তিন অঙ্কবিশিষ্ট । অবশ্য সংখ্যা দুইটি আমি মনে রাখতে পারি নি ।

যোগ দিয়ে আমি আজকে একটা বড় বিষয় বুঝানোর চেষ্টা করব।

 image001

কিভাবে করলাম ?

প্রথমে ৭+১ = ৮ , লিখলাম ৮ হাতে শূন্য

তারপর ৫+৮ = ১৩, লিখলাম ৩ হাতে ১

এরপর ৭ এর সাথে হাতের এক ৭+১ = ৮

সবশেষে ১+৮ = ৯, লিখলাম ৯

 

এখানে আমাদের কাজটা হলো শেষ অঙ্ক গুলোর সাথে হাতে যা নিয়েছি তা যোগ করা । আর পরেরবার তার আগের অঙ্কটি হবে শেষ অঙ্ক ।

 

সংখ্যা শেষ অঙ্ক হাতে আছে যোগফল লিখতে হবে হাতে থাকবে

১৫৭

৭৮১

১৫

           ০

১৩

৭৮

এখন আমি একটা ফাংশন তৈরি করে ফেলি যার কাজ হলো তিনটি সংখ্যা ইনপুট এ নিবে ও তাদের প্রথম দুইটির শেষ অঙ্কের সাথে তৃতীয় সংখাটি যোগ করে যোগফলের শেষ অংকটি প্রিন্ট করবে ।এখানে ৩য় সংখাটি হলো হাতে রাখা সংখাটি । তাহলে ফাংশনটা হবে এরকম ।

আমাদের মাথার মধ্যেও এইরকম একটা ফাংশন কাজ করে । কিন্তু এই ফাংশনটা শেষ হয়ে গেলে কিন্তু আমরা পুরাপুরি যোগফল পাব না । আমরা করি কি এই ফাংশন শেষ করার আগে আবার এই ফাংশন কল করি । ব্যাপারটা অনেকটা অদ্ভুদ, জটিলও বটে ।

আর একটু সহজ করে দেই ।

১৫৭ ও ৭৮১ যোগ করতে গেলে আমাদেরকে একটি ফাংশন তিনবার কল করতে হবে ।

যদি ১০ অঙ্কবিশিষ্ট সংখ্যা হয় তবে ১০ বার কল করতে হবে । আমরা লুপ ঘুরায় এই কাজটা করতে পারি কিন্তু তা আমি এখানে করব না ।

এখানে ফাংশনটা যখন শেষ হয়ে যাবে তার আগ মুহূর্তে আমি আবার নতুন মান দিয়ে ফাংশনটা কল করব । নতুন মান বলতে পরবর্তী ধাপের মান । কোডটা হবে এরকম ।

এভাবে এক ফাংশন এর ভিতর সেই ফাংশনকে কল করাকে বলা হয় রিকার্সন । আর ফাংশনটিকে বলা হয় রিকার্সিভ ফাংশন ।

এখানে এই কোড রান করলে থামার সম্ভাবনা নাই । কারন কতক্ষন ফাংশন কল করবে আমরা তার কোনো শর্ত দেইনি।

যখন a ও b এর মান ০ হয়ে যাবে তখন আর কোনো ফাংশন কল করবে না । মানে কোন কাজ করবে না ।

তাহলে সংশোধিত কোড হল

মজার ব্যাপার হল আউটপুট উলটা আসতেছে । তারপর আবার সব ক্ষেত্রে ঠিকও আসতেছে না (৫৫৫+৫৫৫) । আউটপুট ঠিক করার দায়িত্ব আপনাদের ।

এবার মনে হতে পারে আমরা লুপ দিয়েই তো এই কাজ করতে পারি । আসলেই তাই । লুপ দিয়ে যা করা যায় রিকার্সন দিয়েও তাই করা যায় । কিন্তু রিকার্সনের আসল মজা কি তা আমি আগামী পর্বে আলোচনা করব । তার আগে আপনাদের কিছু কাজ করতে হবে । প্রথমে ঠিক করতে হবে ফাংশনটার কোথায় পরিবরতন করলে আউটপুট উল্টোদিক থেকে সঠিক আসবে । এখন আউটপুট আসতেছে ০১১ ঠিক করলে আউটপুট আসবে ০১১১ । তারপরের কাজ হল লুপ দিয়ে আপনাকে এর আউটপুট ঠিক আনতে হবে । মানে আপনি রিকার্সন দিয়ে না করে লুপ দিয়ে করে দেখবেন ।

 

 

 

 

3 comments

  1. Rashed says:

    Good Job.
    Go Ahead

  2. shamim says:

    Good work bro.I learned c only by seeing ur tutorials.They r good enough.

Leave a Reply

Your email address will not be published. Required fields are marked *