কিভাবে Python Recursion ব্যবহার করবেন
পাইথন রিকার্সন নতুনদের জন্য একটি ভীতিজনক বিষয়। আসুন পৌরাণিক কাহিনীটি দূর করা যাক যে পুনরাবৃত্তি কঠিন তা সংজ্ঞায়িত করে। Recursion হল প্রোগ্রামিং এর একটি পদ্ধতি যেখানে একটি ফাংশন নিজেই কল করে।
যে সহজ শোনাচ্ছে, তাই না? যখন আপনি এটির স্তব্ধতা পান, পুনরাবৃত্তি একটি কঠিন ধারণা নয়।
এই পাইথন টিউটোরিয়ালে, আমরা পুনরাবৃত্তি এবং এটি কীভাবে কাজ করে সে সম্পর্কে কথা বলতে যাচ্ছি। প্রোগ্রামিং এর এই পদ্ধতিটি শুরু করতে আপনাকে সাহায্য করার জন্য আমরা ফ্যাক্টরিয়াল ফাংশন ব্যবহার করে পুনরাবৃত্তির একটি উদাহরণ দিয়ে চলে যাব।
পুনরাবৃত্তি কি?
পুনরাবৃত্তি হল যেখানে আপনি নিজের পরিপ্রেক্ষিতে কিছু সংজ্ঞায়িত করেন।
একটি পুনরাবৃত্ত ফাংশন নিজেকে আবার কল করে সমস্যার সমাধান করে। এই আচরণটি পাইথনের মতো বেশিরভাগ প্রধান প্রোগ্রামিং ভাষাতে সমর্থিত। এগুলি কম্পিউটার বিজ্ঞান এবং ডেটা বিজ্ঞানের একটি গুরুত্বপূর্ণ অংশ।
পুনরাবৃত্তি উপযোগী হয় যখন একটি সমস্যার সমাধান খুঁজে পাওয়া যায় ছোট ছোট সমস্যায় ভাগ করে যা সকলেই একই সূত্র ব্যবহার করে। এই ধরনের সমস্যাগুলিকে প্রায়ই "পুনরাবৃত্ত অ্যালগরিদম" বলা হয়। তাদের সমাধানের চাবিকাঠি নাম!
পুনরাবৃত্ত বনাম পুনরাবৃত্তিমূলক
একটি অ্যালগরিদম সমাধান করার দুটি উপায় আছে:পুনরাবৃত্তিমূলকভাবে বা পুনরাবৃত্তিমূলকভাবে।
অ্যালগরিদমের পুনরাবৃত্তিমূলক সমাধানগুলিকে "শক্তিশালী কিন্তু কুৎসিত" হিসাবে গণ্য করা হয়। তারা কাজটি সম্পন্ন করে, কিন্তু তারা এটি সবচেয়ে মার্জিত উপায়ে করে না। পুনরাবৃত্ত অ্যালগরিদমগুলি সঠিকভাবে বোঝার জন্য, আমাদের পুনরাবৃত্তিমূলক ফাংশনগুলি দেখতে হবে।
81% অংশগ্রহণকারী বলেছেন যে তারা বুটক্যাম্পে যোগ দেওয়ার পরে তাদের প্রযুক্তিগত কাজের সম্ভাবনা সম্পর্কে আরও আত্মবিশ্বাসী বোধ করেছেন। আজই একটি বুটক্যাম্পের সাথে মিলিত হন৷
৷গড় বুটক্যাম্প গ্র্যাড একটি বুটক্যাম্প শুরু করা থেকে শুরু করে তাদের প্রথম চাকরি খোঁজা পর্যন্ত ক্যারিয়ারের পরিবর্তনে ছয় মাসেরও কম সময় কাটিয়েছে।
একটি পুনরাবৃত্তিমূলক ফাংশন একটি ফাংশন যা একটি লুপ ব্যবহার করে একটি সমস্যার সমাধান করে। এটি একটি লুপের ভিতরে কোডটি কার্যকর করবে যতক্ষণ না সেই লুপটি সম্পূর্ণ হয়। একটি পুনরাবৃত্ত ফাংশন হল একটি ফাংশন যা একটি সমস্যাকে ছোট ছোট অংশে বিভক্ত করে এবং প্রতিটি অংশ নিজেই কল করে সমাধান করে৷
ফ্যাক্টোরিয়াল:পুনরাবৃত্তিমূলক উদাহরণ
ফ্যাক্টরিয়ালগুলি পুনরাবৃত্তি এবং পুনরাবৃত্তিমূলক চিন্তা প্রদর্শনের একটি ভাল উপায়। গণিতে, ফ্যাক্টরিয়াল হল একটি সংখ্যা এবং প্রতিটি সংখ্যার যোগফল যা একসাথে গুণ করার আগে।
5 এর ফ্যাক্টরিয়াল সমান 5 * 4 * 3 * 2 * 1। 2 এর ফ্যাক্টরিয়াল 2 * 1 এর সমান।
একটি ফ্যাক্টরিয়াল গণনা করতে, আমরা একটি পুনরাবৃত্তিমূলক ফাংশন লিখতে পারি:
def factorial(number): total = 1 for n in range(1, number + 1): total = total * n return total
এই ফাংশনটি 1 এর রেঞ্জের সমস্ত সংখ্যার মাধ্যমে পুনরাবৃত্তি করতে একটি লুপ ব্যবহার করে এবং আমরা যে সংখ্যাটি যোগ 1 নির্দিষ্ট করেছি। প্রতিটি পুনরাবৃত্তির জন্য, লুপটি যে সংখ্যাটি পুনরাবৃত্তি করছে তা মোট দ্বারা গুণ করা হয়। ফ্যাক্টরিয়াল খুঁজে পেতে আমাদের ফাংশন কল করুন:
answer = factorial(4) print(answer)
আমাদের কোড রিটার্ন করে:24. এই সমাধানে পৌঁছানোর জন্য, আমাদের কোড চলে:
- 1 * 1 =1
- 2 * 2 =4
- 4 * 3 =8
- 8 * 4 =24
আপনি দেখতে পাচ্ছেন, আমাদের কোডটি তার থেকে কম এবং তারপর নিজেই 4 সংখ্যাকে গুণ করে।
এই কোড কার্যকরী. একমাত্র অসুবিধা হল এটি যতটা মার্জিত হতে পারে ততটা নয়। এখানেই পুনরাবৃত্ত ফাংশনগুলি কাজে আসে৷
৷ফ্যাক্টোরিয়াল:পুনরাবৃত্তি উদাহরণ
আসুন একটি পুনরাবৃত্ত ফাংশন লিখি যা একটি ফ্যাক্টরিয়াল গণনা করে। একটি নতুন পাইথন ফাইল খুলুন এবং নিম্নলিখিত কোডে পেস্ট করুন:
def factorial(number): if number == 1: return 1 else: return (number * factorial(number - 1))
এই কোডটি পুনরাবৃত্তিমূলক পদ্ধতি ব্যবহার করে। যখন এই ফাংশনটি চালানো হয়, একটি "if" স্টেটমেন্ট কার্যকর করা হয়। এই বিবৃতিটি ফাংশনে পাস করা সংখ্যাটি 1 এর সমান কিনা তা পরীক্ষা করে। যদি এটি হয় তবে আমাদের ফাংশন 1 প্রদান করে। অন্যথায়, আমাদের সংখ্যার ফ্যাক্টরিয়াল গণনা করা হয়।
এই গণনাটি পূর্ববর্তী সংখ্যার ফ্যাক্টরিয়াল দ্বারা ফাংশনে পাস করা সংখ্যাকে গুণ করে কাজ করে। এই ফাংশনটি বারবার কল করা হয় যতক্ষণ না "সংখ্যা" 1 এর সমান হয়। প্রতিবার ফাংশনটি কল করা হলে, "সংখ্যা" এর মান 1 দ্বারা হ্রাস পায়।
আসুন আমাদের কোডটি 4 নম্বর দিয়ে চেষ্টা করি:
answer = factorial(4) print(answer)
উত্তর 24 ফিরে এসেছে। আমাদের উত্তর সঠিক; এটা আমাদের শেষ উদাহরণ হিসাবে একই. আমরা এই সমস্যার সমাধান বারবার না করে বারবার খুঁজে পেয়েছি।
আপনি এখনও সাহায্য একটি সামান্য বিট প্রয়োজন? আসুন পুনরাবৃত্তির আরেকটি উদাহরণের মাধ্যমে চলুন।
ফিবোনাচি সিকোয়েন্সের সাথে পুনরাবৃত্তি
ফিবোনাচি ক্রম হল একটি গাণিতিক ক্রম যেখানে প্রতিটি সংখ্যা হল আগের দুটি সংখ্যার যোগফল। এই ক্রমটি শুরু হয়:0, 1, 1, 2, 3, 5, 8, 13, এবং আরও।
এই ক্রমটি পরের সংখ্যাটি খুঁজে পেতে দুটি সংখ্যা যোগ করে। এটি পুনরাবৃত্তির জন্য এটি আদর্শ করে তোলে।
একটি পাইথন ফাইল খুলুন এবং এই কোডে পেস্ট করুন:
def fibonacci(number): if number <= 1: return number else: return(fibonacci(number - 1) + fibonacci(number - 2))
এই কোডটি একটি তালিকায় দুটি পূর্ববর্তী সংখ্যার যোগফল গণনা করবে, যতক্ষণ না "সংখ্যা" 1 এর বেশি হয়। অন্যথায়, "সংখ্যা ফেরত দেওয়া হয়"। এখন, আমাদের ফাংশন কল করা যাক:
executions = 5 print("Fibonacci Sequence:") for number in range(executions): print(fibonacci(number))
এক্সিকিউশন ভেরিয়েবল ট্র্যাক করে ফিবোনাচি সিকোয়েন্সে কত সংখ্যা আমরা গণনা করতে চাই। আমরা এটি একটি লুপ তৈরি করতে ব্যবহার করি যা আমাদের fibonacci()
বলে 1 এর পরিসরে প্রতিটি সংখ্যার জন্য ফাংশন এবং "নির্বাহের" মান।
আমাদের ফর লুপ শুরু হওয়ার আগে, আমরা কনসোলে "ফিবোনাচি সিকোয়েন্স:" প্রিন্ট করি। এই উদাহরণে, আমাদের "ফর" লুপ কার্যকর করে:
fibonacci(1) fibonacci(2) fibonacci(3) fibonacci(4) fibonacci(5)
আসুন একসাথে আমাদের কোড চালাই এবং দেখুন কি হয়:
Fibonacci Sequence: 0 1 1 2 3
আমাদের কোড ফিবোনাচি অনুক্রমের প্রথম পাঁচটি সংখ্যা গণনা করে। আমরা "মৃত্যুদণ্ড" এর মান বাড়িয়ে আরও সংখ্যা গণনা করতে পারি।
পুনরাবৃত্তি গভীরতা এবং ভিত্তি শর্তাবলী
একটি পুনরাবৃত্ত ফাংশন একটি বেস শর্ত থাকতে হবে. এটি এমন একটি শর্ত যা একটি নির্দিষ্ট বেস কেস পূরণ হলে পুনরাবৃত্তি বন্ধ করে। একটি বেস ফাংশন ছাড়া, একটি অসীম লুপ তৈরি হবে।
একটি পুনরাবৃত্ত ফাংশন ডিফল্টরূপে 1,000 বারের বেশি নিজেকে কার্যকর করতে পারে না। একবার এই সীমাতে পৌঁছে গেলে, এর মতো একটি ত্রুটি প্রদর্শিত হবে:
RecursionError: maximum recursion depth exceeded
এখানে আমাদের ফিবোনাচি প্রোগ্রামের মূল শর্ত রয়েছে:
... if number <= 1: return number …
এই শর্তটি আমাদের ফিবোনাচি প্রোগ্রামের ভিতরে "সংখ্যা" এর মান 1 এর সমান বা কম কিনা তা পরীক্ষা করে। যদি এটি হয়, তাহলে "সংখ্যা" এর মান ফেরত দেওয়া হয়; অন্যথায়, পুনরাবৃত্ত ফাংশন শুরু হয়।
আমি কেন পুনরাবৃত্তি ব্যবহার করব?
পুনরাবৃত্তিমূলক ফাংশনগুলির উপর পুনরাবৃত্তি ব্যবহার করার সুবিধা কী? প্রযুক্তিগতভাবে, উভয় পদ্ধতি একই ফলাফল অর্জন করতে পারে। পুনরাবৃত্তির সুবিধা হল এটি পড়া সহজ।
আপনি যখন একটি পুনরাবৃত্ত ফাংশন দেখতে পান, তখন এটি স্পষ্ট যে একটি সমস্যার উত্তর এটিকে ছোট অংশে ভেঙে ফেলার মধ্যে রয়েছে। যদিও পুনরাবৃত্তিমূলক লুপগুলি কখনও কখনও দ্রুত হতে পারে, পুনরাবৃত্ত ফাংশনগুলি সাধারণত তাদের পাঠযোগ্যতার কারণে পছন্দ করা হয়।
যেহেতু পুনরাবৃত্ত ফাংশনগুলি পড়া সহজ, সেগুলি বজায় রাখা এবং ডিবাগ করাও সহজ। এটি বিশেষভাবে কার্যকর যখন আপনি জটিল অ্যালগরিদম লিখছেন যা বোঝা কঠিন হতে পারে৷
৷উপসংহার
একটি পুনরাবৃত্ত ফাংশন হল একটি ফাংশন যা একটি সমস্যার সমাধান খুঁজে পেতে নিজেকে কল করে।
পুনরাবৃত্ত ফাংশন একটি সমস্যাকে একাধিক অংশে বিভক্ত করে এবং প্রতি পুনরাবৃত্তির সমস্যার একটি অংশ সমাধান করে। রিকার্সিভ ফাংশনগুলি সাধারণত ফিবোনাচি ক্রমানুসারে ফ্যাক্টরিয়াল এবং সংখ্যা গণনা করতে ব্যবহৃত হয়। এগুলি বেশ কয়েকটি অ্যালগরিদমেও ব্যবহৃত হয়।
এখন আপনি পাইথনে রিকার্সিভ ফাংশনগুলির সাথে কাজ শুরু করতে প্রস্তুত৷
৷