রিকার্সন শেষ পর্ব

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/

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

যদি একটি ফাংশন f() যা নিজেই নিজের একটি কল স্টেটমেন্ট অথবা দ্বিতীয় কোন ফাংশনের একটি কল স্টেটমেন্ট দ্বারা f() এ ফিরে আসে তখন f() কে রিকার্সিভ ফাংশন বলে । ফাংশনটি যাতে অনির্দিষ্ট সময় ধরে না চলে তার জন্য কিছু বিষয় মেনে চলা হয় ।

  • এমন কিছু বৈশিষ্ট্য যার জন্য ফাংশনটি আর নিজেকে কল করে না । অর্থাৎ ফাংশনের কিছু আর্গুমেন্ট থাকবে যার জন্য ফাংশনটি আর নিজেকে কল করবে না । একে বেস ভ্যালু বলে ।
  • প্রত্যেক সময়ে যখন ফাংশনটি নিজেকে কল করে তখন ফাংশনের আর্গুমেন্ট বেস ভ্যেলুর নিকটবর্তী হতে থাকবে ।

অর্থাৎ রিকার্সন এর ক্ষেত্রে একটি শর্ত লাগবে যার জন্য ফাংশনটি কোন এক সময় টারমিনেট করবে এবং প্রতিবার সেই শর্তের দিকে ফাংশনটি আগাবে ।

মাথা তো পুরোপুরি নষ্ট করে দিলাম মনে হয় । আমরা ফেক্টরিয়াল হিসাবের ফাংশনটি লক্ষ করি ।

fact(5) এর মান প্রিন্ট করা হইলে প্রিন্ট করবে ১২০ ।

এখানে if(n==1)  return 1; এটা হল টার্মিনেট করার শর্ত , যাকে বলে বেস ভ্যালু । এখন এর ভিতর যে ফাংশনটি কল করা হয়েছে তা হল fact(n-1) । অর্থাৎ

fact(5) ফাংশনটি কল করবে fact(4) ফাংশনটিকে

fact(4) ফাংশনটি কল করবে fact(3) ফাংশনটিকে

fact(3) ফাংশনটি কল করবে fact(2) ফাংশনটিকে

fact(2) ফাংশনটি কল করবে fact(1) ফাংশনটিকে

যখন fact(1) ফাংশনটির কাজ শুরু হবে  n==1 এই শর্তটা সত্য হওয়ার জন্য ফাংশনটি 1 রিটার্ন করবে । এই রিটার্ন না করলে অনির্দিষ্ট সময় ধরে প্রোগ্রামটি চলতো । তারপর এই

fact(1),  1 রিটার্ন করবে fact(2) কে

fact(২),  2*fact(1) = 2*1 = 2 রিটার্ন করবে fact(3) কে

fact(3),  3*fact(2) = 3*2= 6  রিটার্ন করবে fact(4) কে

fact(4),  4*fact(3) = 4*6 = 24  রিটার্ন করবে fact(5) কে

আর তাই fact(5) এর মান হবে  5*fact(4) = 5*24 = 120 ।

 

এবার আপনারা বেশি বেশি করে রিকার্সন প্রাকটিস করুন । আর নিচের প্রবলেমগুলো সল্ভ করার চেষ্টা করুন রিকার্সন দিয়ে ।

uva:

  • 10931 – Parity
  • 10035 – Primary Arithmetic
  • 369 – Combinations
  • 10696 – f91

 

 

 

 

3 comments

  1. Abu Musa says:

    vai apni amake ackerman function er c code dite parben..ami valo vabe problem ta solve korte parci na….

  2. fahim ahmed says:

    Nice

  3. shahintaj fokir says:

    tkanks vi ,aponar tutorial dak a onak kisu siksi .

Leave a Reply

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