Python Recursion

পাইথন রিকারশন সম্পর্কে জানুন

Recursion

রিকারশন হল যখন একটি ফাংশন নিজেই কল করে।

পুনরাবৃত্তি একটি সাধারণ গাণিতিক এবং প্রোগ্রামিং ধারণা। এর মানে হল একটি ফাংশন নিজেই কল করে। সুবিধা হল আপনি একটি উপসংহারে পৌঁছানোর জন্য ডেটার মাধ্যমে চক্র করতে পারেন।

⚠️গুরুত্বপূর্ণ:

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

উদাহরণ

আপনার নিজস্ব পাইথন সার্ভার পান:

একটি সাধারণ পুনরাবৃত্তি ফাংশন 5 থেকে গণনা করা হচ্ছে:

def countdown(n):
  if n <= 0:
    print("Done!")
  else:
    print(n)
    countdown(n - 1)

countdown(5)

এই ফাংশনটি 5 থেকে 1 প্রিন্ট করে এবং "সম্পন্ন!" যে প্রিন্ট.

বেস কেস এবং রিকারসিভ কেস

প্রতিটি পুনরাবৃত্তি ফাংশন দুটি অংশ থাকতে হবে:

বেস কেস ব্যতীত, নির্ভরতা সর্বদা নিজেই কল করবে, যার ফলে স্ট্যাক ওভারফ্লো ত্রুটি হবে।

উদাহরণ

বেস কেস এবং রিকার্সিভ কেস সনাক্তকরণ:

def factorial(n):
  # Base case
  if n == 0 or n == 1:
    return 1
  # Recursive case
  else:
    return n * factorial(n - 1)

print(factorial(5))

💡দ্রষ্টব্য:

বেস কেস খুবই গুরুত্বপূর্ণ। সর্বদা নিশ্চিত করুন যে আপনার পুনরাবৃত্তি ফাংশনে এমন একটি শর্ত রয়েছে যা শেষ পর্যন্ত পূরণ করা হবে।

Fibonacci Sequence

একটি ক্লাসিক উদাহরণ হল ফিবোনাচি ক্রম, যেখানে প্রতিটি সংখ্যা পূর্ববর্তী দুটির যোগফল। ক্রমটি 0 এবং 1 দিয়ে শুরু হয়:

0, 1, 1, 2, 3, 5, 8, 13, ...

সিরিজটি অবিরাম চলতে থাকে, প্রতিটি সংখ্যা আগের দুটির যোগফল।

উদাহরণ

ফিবোনাচি অনুক্রমের 7 তম সংখ্যাটি খুঁজুন:

def fibonacci(n):
  if n <= 1:
    return n
  else:
    return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci(7))

এটি ফিবোনাচি সিরিজের 7 তম সংখ্যা গণনা করে (যা 13)।

Recursion with Lists

একবারে একটি উপাদানের সাথে কাজ করে তালিকাগুলি প্রক্রিয়া করতে পুনরাবৃত্তি ব্যবহার করা যেতে পারে:

উদাহরণ 1

তালিকার সমস্ত উপাদানের যোগফল গণনা করুন:

def sum_list(numbers):
  if len(numbers) == 0:
    return 0
  else:
    return numbers[0] + sum_list(numbers[1:])

my_list = [1, 2, 3, 4, 5]
print(sum_list(my_list))

উদাহরণ 2

তালিকায় সর্বাধিক মান খুঁজুন:

def find_max(numbers):
  if len(numbers) == 1:
    return numbers[0]
  else:
    max_of_rest = find_max(numbers[1:])
    return numbers[0] if numbers[0] > max_of_rest else max_of_rest

my_list = [3, 7, 2, 9, 1]
print(find_max(my_list))

Recursion Depth Limit

Python এর একটি সীমা আছে কিভাবে গভীর পুনরাবৃত্তি যেতে পারে। ডিফল্ট সীমা সাধারণত প্রায় 1000 পুনরাবৃত্তি কল হয়।

উদাহরণ 1

পুনরাবৃত্তি সীমা পরীক্ষা করুন:

import sys
print(sys.getrecursionlimit())

উদাহরণ 2

যদি আরও গভীর পুনরাবৃত্তির প্রয়োজন হয়, আপনি সীমা বাড়াতে পারেন, তবে সতর্ক থাকুন কারণ এটি ক্র্যাশের কারণ হতে পারে:

import sys
sys.setrecursionlimit(2000)
print(sys.getrecursionlimit())

⚠️সতর্কতা:

পুনরাবৃত্তি থ্রেশহোল্ড বাড়ানো খুব সাবধানে করা উচিত। আরও গভীরভাবে পুনরাবৃত্তির জন্য, পরিবর্তে পুনরাবৃত্তি ব্যবহার বিবেচনা করুন।

অনুশীলন করুন

পুনরাবৃত্তি একটি বেস কেস উদ্দেশ্য কি?

পক্ষপাতের গতি বাড়াতে
✗ ভুল! বেস কেস গতি বাড়ানোর জন্য নয়, এটি পুনরাবৃত্তি বন্ধ করার জন্য
পুনরাবৃত্তি বন্ধ করার জন্য একটি শর্ত প্রদান করুন
✓ ঠিক আছে! বেস কেস পুনরাবৃত্তি বন্ধ করার জন্য একটি শর্ত প্রদান করে, অন্যথায় ফাংশনটি নিজেকে অবিরামভাবে কল করবে
প্রো কল সংরক্ষণ করতে
✗ ভুল! বেস কেস কল সংরক্ষণের জন্য নয়, এটি পুনরাবৃত্তি নিয়ন্ত্রণ প্রদান করে