পাইথনে রিকার্সন সম্পর্কে আপনার যা জানা দরকার



এই নিবন্ধটি আপনাকে পাইথনে পুনরাবৃত্তি সম্পর্কে একটি বিস্তারিত এবং বিস্তৃত জ্ঞান পেতে সহায়তা করবে। কিভাবে এটা কাজ করে? এবং এর উদ্দেশ্য কী?

সহজ কথায়, পুনরাবৃত্তি হ'ল ফাংশন কল করেই সমস্যাটি সমাধানের একটি উপায়, শব্দটি “ পুনরাবৃত্তি 'ল্যাটিন ক্রিয়া থেকে উদ্ভূত' পুনরাবৃত্তি ”, যার অর্থ কোনও কিছু আবার করা। এটি পুনরাবৃত্তির কাজটি করে যা এটি একই জিনিসটিকে বারবার পুনরায় সম্পাদন করে i এই নিবন্ধে, আমরা অজগরের পুনরাবৃত্তি সম্পর্কে শিখব। নিম্নলিখিত এই ব্লগে বিষয় অন্তর্ভুক্ত:

পাইথনে পুনরাবৃত্তি কি?

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





Recursion-in-Python

কীভাবে এটি কাজ করে তা দেখতে কয়েকটি উদাহরণ নেওয়া যাক, যদি আপনাকে ইতিবাচক পূর্ণসংখ্যা দেওয়া হয় তবে ঘটনাটি হবে।



জাভাস্ক্রিপ্টে অ্যারের আকার
  • এন! = এন * (এন -১) * (এন -২) এবং আরও অনেক কিছু।
  • 2! = 2 * (2-1)
  • এক! = 1
  • 0! = 0
  • 4! = 4 * 3!
  • 3! = 3 * 2!
  • 2! = 2 * 1!

উপরের মানগুলি প্রতিস্থাপনের ফলে নিম্নলিখিত অভিব্যক্তিটি দেখাবে

  • 4! = 4 * 3 * 2 * 1

আমাদের একটি ফাংশনটি সংজ্ঞায়িত করতে হবে যাক সত্য (এন) যা ইতিবাচক পূর্ণসংখ্যা বা 0টিকে তার পরামিতি হিসাবে গ্রহণ করে এবং নবম ফ্যাক্টরিয়ালটি ফেরত দেয়, আমরা কীভাবে পুনরাবৃত্তি ব্যবহার করে এটি করতে পারি?

আসুন দেখা যাক, পুনরাবৃত্তি ব্যবহার করে এটি করার জন্য আমাদের নীচের সমীকরণটি পরীক্ষা করতে হবে



  • এন! = n। (n-1)। (n-2) & Hellip3.2.1

  • এন! = এন। (এন -১)! # আমরা উপরের বিবৃতিটি এই লাইনে আবার লিখতে পারি

  • এখন এখানে আমরা 2 টি প্যারামিটার হিসাবে পাস করলে আমরা পাবেন:

    • 2! = 2.1! = 2

  • একইভাবে, আমরা 1 পাস করলে আমরা পাবেন:

    • এক! = 1.0! = 1

  • তবে আমরা যদি 0 পাস করি তবে এটি ব্রেক হয়ে যায়

    • 0! = 0। (- 1)! এবং এখানে -1 এর জন্য ফ্যাক্টরিয়াল সংজ্ঞায়িত করা হয়নি তাই এটি কেবল মান> 0 এর জন্য কাজ করে

  • সুতরাং আমরা দুটি মামলা লিখতে হবে

    • 1. এন! = এন। (এন -১)! if n> = 1

    • 2. 1 যদি এন = 0 হয়

এটি সমস্ত ধনাত্মক পূর্ণসংখ্যার এবং 0 এর জন্য একটি সম্পূর্ণ সমাধান।

সমাপ্তির শর্ত

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

কারখানা শর্ত:

  • n = n * (n-1) এর ফ্যাকটোরিয়াল যতক্ষণ n 1 এর চেয়ে বড় হয়।
  • 1 যদি এন = 0 হয়

আমরা অজগর কোডে উপরের ফ্যাক্টরিয়াল অবস্থার রূপান্তর করব:

ডিফ ফ্যাক্ট (এন): যদি এন == 1: রিটার্ন এন অন্য: রিটার্ন এন * ফ্যাক্ট (এন -1)

আসুন একটি উদাহরণ নেওয়া যাক, আমরা 4 এর ফ্যাক্টরিয়ালটি খুঁজতে চাই:

ফ্যাক্ট (4) # এটি 4 * ফ্যাক্ট (3) এবং এ জাতীয় এন == 1 অবধি ফিরে আসবে।
 আউটপুট: 24

এটি এর সরলতা এবং স্বচ্ছতার কারণে পুনরাবৃত্তির উদাহরণ হিসাবে প্রায়শই ব্যবহৃত হয়। প্রতিটি পদক্ষেপে সমস্যার ক্ষুদ্র উদাহরণগুলির সমাধান করা যাকে কম্পিউটার বিজ্ঞানের পুনরাবৃত্তি বলে অভিহিত করা হয়।

পাইথনের পুনরাবৃত্তি সীমা

কিছু ভাষায়, আপনি একটি অসীম পুনরাবৃত্ত লুপ তৈরি করতে পারেন তবে পাইথনে, পুনরাবৃত্তি সীমা রয়েছে। সীমা পরীক্ষা করতে sys মডিউল থেকে নিম্নলিখিত ফাংশনটি চালান। যা অজগর জন্য পুনরাবৃত্তি সেট সীমা দেবে।

আমদানি করুন sys.getrecursionlimit ()
 আউটপুট: 1000

আপনি আপনার প্রয়োজনীয়তা অনুযায়ী সিএস মডিউলের ফাংশনসেটেকার্সিউশনিমিট () ব্যবহার করেও সীমাটি পরিবর্তন করতে পারেন, এখন আসুন এমন একটি ফাংশন তৈরি করুন যা সীমা অতিক্রম না করে এবং যা ঘটে তা যাচাই না করা পর্যন্ত নিজেকে পুনরাবৃত্তি বলে ডাকে:

Def recursive (): recursive () if __name__ == '__main__': recursive ()

আপনি যদি উপরের কোডটি চালনা করেন তবে আপনি একটি রানটাইম ব্যতিক্রম পাবেন: রানটাইম এরির: সর্বাধিক পুনরাবৃত্তির গভীরতা অতিক্রম করে। পাইথন আপনাকে এমন একটি ফাংশন তৈরি করতে বাধা দেয় যা শেষ না হওয়া পুনরাবৃত্ত লুপে শেষ হয়।

পুনরাবৃত্তির সাথে সমতলকরণের তালিকা

ফ্যাক্টরিওরিয়ালগুলি বাদে আপনি পুনরাবৃত্তি ব্যবহার করে করতে পারেন এমন অন্যান্য জিনিস, যাক, নীচে কোড ব্যবহার করে এটি করা যেতে পারে এমন কোনও তালিকা থেকে আপনি একক তৈরি করতে চান say

ডিএফ ফ্ল্যাটেন (এ_লিস্ট, ফ্ল্যাট_লিস্ট = কিছুই নয়): ফ্ল্যাট_লিস্ট কোনওটি নয়: ফ্ল্যাট_লিস্ট = [] এ_লিস্টে আইটেমের জন্য: যদি আইসিনস্ট্যান্স (আইটেম, তালিকা): ফ্ল্যাটেন (আইটেম, ফ্ল্যাট_লিস্ট) অন্য: ফ্ল্যাট_লিস্ট.অ্যাপেন্ড (আইটেম) ফ্ল্যাট_লিস্ট যদি ফিরে আসে____ == '__ মেইন__': নেস্টেড = [1,2,3, [4,5], 6] এক্স = সমতল (নেস্টেড) প্রিন্ট (এক্স)
 আউটপুট: [1,2,3,4,5,6]

উপরের কোডটি চালনার ফলে পূর্ণসংখ্যার তালিকাগুলি পূর্ণসংখ্যার তালিকার পরিবর্তে একক তালিকার ফলাফল হবে যা আমরা ইনপুট হিসাবে ব্যবহার করেছি। আপনি অন্যান্য উপায়ে ব্যবহার করে একই জিনিসটি করতে পারেন, পাইথনের কাছে ইটার্টোলস.কেইন () নামে কিছু রয়েছে যা আপনি একটি ফাংশন চেইন তৈরি করার জন্য ব্যবহৃত কোডটি পরীক্ষা করতে পারেন () আমাদের মতো একই কাজটি করা একটি ভিন্ন পদ্ধতির।

পুনরাবৃত্তি সুবিধা

  • কোডটি একটি পুনরাবৃত্তি ফাংশনে পরিষ্কার এবং মার্জিত।

  • সংমিশ্রনের কাজটি পুনরাবৃত্তি ব্যবহার করে সহজ উপ-সমস্যায় বিভক্ত করা যেতে পারে।

  • কিছু নেস্টেড পুনরাবৃত্তি ব্যবহারের চেয়ে পুনরাবৃত্তির সাথে ক্রম উত্পন্ন করা সহজ।

পুনরাবৃত্তি অসুবিধা

  • পুনরাবৃত্তি ফাংশন পিছনে যুক্তি অনুসরণ কখনও কখনও কখনও কঠিন হতে পারে।

  • পুনরাবৃত্ত কলগুলি ব্যয়বহুল (অদক্ষ) কারণ তারা প্রচুর স্মৃতি এবং সময় নেয়।

  • রিকার্সিভ ফাংশনগুলি ডিবাগ করা শক্ত।

এই নিবন্ধে আমরা দেখেছি যে পুনরাবৃত্তি কী এবং আমরা কীভাবে সমস্যা বিবৃতি থেকে পুনরাবৃত্ত ফাংশন বিকাশ করতে পারি, গণিতগতভাবে কোনও সমস্যার বিবৃতি কীভাবে সংজ্ঞায়িত করা যায়। আমরা ফ্যাক্টরিয়ালটির একটি সমস্যার সমাধান করেছি এবং ফ্যাক্টরিয়ালগুলির সন্ধানের জন্য প্রয়োজনীয় শর্তাদি খুঁজে পেয়েছি যেখান থেকে আমরা সেই শর্তগুলি অজগর কোডে রূপান্তর করতে সক্ষম হয়েছি যাতে আপনাকে পুনরাবৃত্তি কীভাবে কাজ করে তা বোঝায়। আমি মনে করি এটি পরিস্কার যে পাইথনের পুনর্বিবেচনার জন্য অন্তর্নির্মিত সীমা রয়েছে বিকাশকারীদের খারাপভাবে নির্মিত পুনরাবৃত্তি ফাংশনগুলি তৈরি করা থেকে বিরত রাখতে। একটি গুরুত্বপূর্ণ বিষয় লক্ষ্য করুন যে পুনরাবৃত্তি ডিবাগ করা কঠিন কারণ ফাংশন নিজেই কল করে চলেছে।