Python Recursion

Python மறுநிகழ்வு (Recursion) பற்றி கற்றுக்கொள்ளுங்கள்

Recursion

மறுநிகழ்வு என்பது ஒரு சார்பு தன்னையே அழைக்கும்போது ஆகும்.

மறுநிகழ்வு என்பது பொதுவான கணித மற்றும் நிரலாக்க கருத்தாகும். இதன் பொருள் ஒரு சார்பு தன்னையே அழைக்கிறது. இதன் நன்மை என்னவென்றால், ஒரு முடிவை அடைய தரவு வழியாக நீங்கள் சுழல முடியும்.

⚠️ முக்கியம்:

உருவாக்குநர் மறுநிகழ்வுடன் மிகவும் கவனமாக இருக்க வேண்டும், ஏனெனில் ஒருபோதும் முடிவடையாத ஒரு சார்பை எழுதுவது அல்லது அதிக அளவு நினைவகம் அல்லது செயலி சக்தியைப் பயன்படுத்தும் ஒன்றை எழுதுவது மிகவும் எளிதானது. இருப்பினும், சரியாக எழுதப்பட்டால், மறுநிகழ்வு மிகவும் திறமையான மற்றும் கணித ரீதியாக நேர்த்தியான நிரலாக்க அணுகுமுறையாக இருக்கும்.

எடுத்துக்காட்டு

உங்கள் சொந்த Python சேவையகத்தைப் பெறவும்:

5 இலிருந்து குறைந்து எண்ணும் ஒரு எளிய மறுநிகழ்வு சார்பு:

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

countdown(5)

இந்த சார்பு 5 இலிருந்து 1 வரை அச்சிட்டு "Done!" என்று அச்சிடுகிறது.

Base Case மற்றும் Recursive Case

ஒவ்வொரு மறுநிகழ்வு சார்பும் இரண்டு பகுதிகளைக் கொண்டிருக்க வேண்டும்:

Base case இல்லாமல், சார்பு தன்னையே எப்போதும் அழைக்கும், இது ஒரு stack overflow பிழையை ஏற்படுத்தும்.

எடுத்துக்காட்டு

Base case மற்றும் recursive case ஐ அடையாளம் காணுதல்:

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

print(factorial(5))

💡 குறிப்பு:

Base case மிகவும் முக்கியமானது. உங்கள் மறுநிகழ்வு சார்பு இறுதியில் சந்திக்கப்படும் ஒரு நிபந்தனையைக் கொண்டிருக்கிறதா என்பதை எப்போதும் உறுதிப்படுத்திக் கொள்ளுங்கள்.

Fibonacci Sequence

Fibonacci தொடர் ஒரு கிளாசிக் எடுத்துக்காட்டாகும், அங்கு ஒவ்வொரு எண்ணும் முந்தைய இரண்டின் கூட்டுத்தொகையாகும். தொடர் 0 மற்றும் 1 உடன் தொடங்குகிறது:

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

தொடர் முடிவில்லாமல் தொடர்கிறது, ஒவ்வொரு எண்ணும் முந்தைய இரண்டின் கூட்டுத்தொகையாகும்.

எடுத்துக்காட்டு

Fibonacci தொடரில் 7வது எண்ணைக் கண்டறியவும்:

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

print(fibonacci(7))

இது Fibonacci தொடரில் 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())

⚠️ எச்சரிக்கை:

மறுநிகழ்வு வரம்பை அதிகரிப்பது மிகவும் கவனத்துடன் செய்யப்பட வேண்டும். மிகவும் ஆழமான மறுநிகழ்வுக்கு, பதிலாக மறு செய்கையைப் பயன்படுத்துவதைக் கவனியுங்கள்.

பயிற்சி

மறுநிகழ்வில் ஒரு Base case இன் நோக்கம் என்ன?

சார்பின் வேகத்தை அதிகரிக்க
✗ தவறு! Base case வேகத்தை அதிகரிப்பதற்காக அல்ல, அது மறுநிகழ்வை நிறுத்துவதற்காகும்
மறுநிகழ்வை நிறுத்த ஒரு நிபந்தனையை வழங்க
✓ சரி! Base case மறுநிகழ்வை நிறுத்துவதற்கான நிபந்தனையை வழங்குகிறது, இல்லையெனில் சார்பு முடிவில்லாமல் தன்னையே அழைக்கும்
சார்பின் அழைப்பை சேமிக்க
✗ தவறு! Base case அழைப்புகளை சேமிப்பதற்காக அல்ல, அது மறுநிகழ்வு கட்டுப்பாட்டை வழங்குகிறது