> For the complete documentation index, see [llms.txt](https://bangla-python-book.gitbook.io/python-programming-language/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bangla-python-book.gitbook.io/python-programming-language/functional-programming-python/recursion-in-python.md).

# রিকার্শন ইন পাইথন

রিকার্শন বলতে বোঝায় নিজের কাজ নিজে করা। ব্যাপারটা এমন যে তুমি আয়নার সামনে দাঁড়িয়ে নিজেকে প্রশ্ন করছ এবং নিজেই তার উত্তর দিচ্ছ। আমরা একটা নির্দিষ্ট করার জন্য একটি ফাংশন তৈরি করি। যদি এমন হয় যে সে একই কাজটি ওই ফাংশনের ভিতর কোন একটা জায়গায় আবার করা লাগছে তখন আমরা ওই ফাংশনের ভেতরেই আবার তাকে-ই কল করি। একেই বলে রিকার্শন। উদাহরণঃ

```python
def factorial(n):
    print("factorial function has been called with n = " + str(n))
    if n == 1:
        return 1
    else:
        result = n * factorial(n-1)
        return result
print("Final result %s" %(factorial(5)))
```

আউটপুটঃ

```
factorial function has been called with n = 5
factorial function has been called with n = 4
factorial function has been called with n = 3
factorial function has been called with n = 2
factorial function has been called with n = 1
final result 120
```

এ factorial ফাংশন টি প্রথমে 5 এর জন্য এক্সিকিউট হওয়া শুরু হয় এবং যেহেতু n == 1 নয় তাই প্রোগ্রামটি else স্টেট্মেন্টে ঢুকে। তারপরের লাইনে result কাউন্ট করার সময় factorial ফাংশন নিজেকেই আবার কল করে এবং তখন আর্গুমেন্ট n এর মান হল (n-1)=(5-1)=4 এভাবে একই ভাবে 1 পর্যন্ত এক্সিকিউট করে এবং রেজাল্ট রিটার্ন করে। এখানে আমাদের ফাংশনটি n=1 এর জন্য শেষ হয়েছে। এইকন্ডিশন কে বলা হয় বেজ কন্ডিশন। কোন রিকার্সিব ফাংশনে যদি বেজ কন্ডিশন না থাকে তাহলে ফাংশনটি ইনফাইনাইটলি চলতে থাকবে।
