நீங்கள் எப்போதாவது முடிவில்லாத சுழற்சியில் சிக்கியிருக்கிறீர்களா, அங்கு ஒரு சிக்கல் சிறிய துண்டுகளாக கிளைத்துக்கொண்டே இருக்கிறதா?
அப்படியானால், நீங்கள் மறுநிகழ்வு உலகிற்கு வந்திருக்கலாம். புரிந்துகொள்வது சவாலாகத் தோன்றினாலும், கவலைப்பட வேண்டாம்! இந்த இடுகையில், மறுநிகழ்வுகளின் வகைகளைப் பற்றி அறிய ஒரு சுவாரஸ்யமான பயணத்தை மேற்கொள்வோம்.
நாம் பல சுழல்நிலை அணுகுமுறைகளை ஆராயும் போது கொக்கி. மறுநிகழ்வின் கண்கவர் மண்டலத்திற்குள் நுழைய தயாராகுங்கள் மற்றும் சிக்கலான சிக்கல்களைத் தீர்ப்பதில் அதன் குறிப்பிடத்தக்க திறனைக் கவனியுங்கள்.
மறுநிகழ்வுகள் என்றால் என்ன?
அடிப்படை வார்த்தைகளில், மறுநிகழ்வு என்பது ஒரு சக்திவாய்ந்த நிரலாக்க நுட்பமாகும், இது செயல்பாட்டின் போது தன்னை அழைக்கும் செயல்பாட்டை உள்ளடக்கியது. இது ஒரு கண்ணாடியில் உற்றுப் பார்ப்பது மற்றும் ஒரு உருவத்திற்குள் ஒரு படத்தைப் பார்ப்பது போன்றது, இதன் விளைவாக சுய-குறிப்பு சுழற்சி ஏற்படுகிறது.
பெரிய சிக்கல்களைச் சிறிய, மேலும் சமாளிக்கக்கூடிய துணைச் சிக்கல்களாகப் பிரிப்பதன் மூலம் மறுநிகழ்வைப் பயன்படுத்தி அவற்றைச் சமாளிக்கலாம்.
இது ஒரு ஜிக்சாவை ஒன்றிணைப்பதைப் போன்றது, அங்கு ஒரு துண்டு மற்ற பகுதிகளுடன் முழு படத்தை உருவாக்குகிறது. பல்வேறு உள்ளீடுகளுடன் ஒரே மாதிரியான வழிமுறைகளை மீண்டும் செய்வதன் மூலம் சிக்கல்களை நேர்த்தியான மற்றும் திறமையான முறையில் தீர்க்க மறுநிகழ்வு நம்மை அனுமதிக்கிறது.
1-நேரடி மறுநிகழ்வு
நேரடி மறுநிகழ்வு என்பது மிக அடிப்படையான மறுநிகழ்வு ஆகும், இதில் ஒரு செயல்பாடு தன்னை நேரடியாக அழைக்கிறது. ஒரு அடிப்படை வழக்கு அடையப்படும் வரை, இது ஒரு சிக்கலான சிக்கலை சிறிய துணை சிக்கல்களாகப் பிரிப்பதை உள்ளடக்குகிறது, இது முடிவுக்கு வழிவகுக்கும்.
சுழல்நிலை செயல்பாடு பல்வேறு உள்ளீடுகளுடன் தன்னை அழைக்கிறது, அதே வழிமுறைகளின் தொகுப்பை மீண்டும் மீண்டும் செயல்படுத்த உதவுகிறது. ஒவ்வொரு அழைப்பும் முந்தைய ஒன்றின் அடிப்படையில் கட்டமைக்கப்படுகிறது, மறுநிகழ்வை முடிவுக்குக் கொண்டுவரும் அடிப்படை வழக்கை படிப்படியாக நெருங்குகிறது.
இந்த உதாரணத்தைச் சரிபார்ப்போம்.
def countdown(n):
if n <= 0:
return
print(n)
countdown(n - 1)
countdown(5)
வெளியீடு:
5
4
3
2
1
2-மறைமுக மறுநிகழ்வு
மறைமுக மறுநிகழ்வு சுழல் பாதையில் ஒரு புதிரான திருப்பத்தை சேர்க்கிறது. நேரடியான மறுநிகழ்வுக்கு மாறாக, ஒரு செயல்பாடு தன்னை வெளிப்படையாக அழைக்கும் செயல்பாட்டை உள்ளடக்கியது, மறைமுக மறுநிகழ்வு செயல்பாடு அழைப்புகளின் சங்கிலியை உள்ளடக்கியது.
ஒரு செயல்பாடு மற்றொன்றை அழைக்கிறது, இது அசல் செயல்பாட்டை அல்லது வேறு எந்த செயல்பாட்டையும் அழைக்கலாம், அது இறுதியாக அசல் நிலைக்குத் திரும்பும். இந்த ஒன்றோடொன்று இணைக்கப்பட்ட செயல்பாடு அழைப்புகள் ஒரு பரவசமான நடனத்தை உருவாக்குகிறது, இதில் ஒரு சிக்கலைச் சரிசெய்ய பல செயல்பாடுகள் ஒத்துழைக்கின்றன.
உதாரணமாக:
def function_A(n):
if n > 0:
print("A:", n)
function_B(n - 1)
def function_B(n):
if n > 0:
print("B:", n)
function_A(n - 1)
function_A(3)
வெளியீடு:
A: 3
B: 2
A: 1
3-லீனியர் ரிகர்ஷன்
உங்கள் இலக்கை அடையும் வரை, ஒரு நேரத்தில் ஒரு படி, நேரான பாதையில் ஒரு பயணத்தைக் கவனியுங்கள். இந்த தொடர் நுட்பம் நேரியல் மறுநிகழ்வு மூலம் பொதிந்துள்ளது, இதில் ஒரு செயல்பாடு ஒவ்வொரு செயல்பாட்டு மறுநிகழ்வுகளிலும் ஒற்றை சுழல்நிலை அழைப்பைச் செய்கிறது.
ஒவ்வொரு சுழல்நிலை அழைப்பிலும், சிக்கல் அளவைக் குறைப்பதன் மூலம் சுழல்நிலை செயல்முறை ஒரு அடிப்படை வழக்குக்கு நெருக்கமாக நகர்கிறது. இது ஒரு தெளிவான மற்றும் நேரியல் முறையில் தொடர்கிறது, இறுதி விடையை அடையும் வரை துணைப் பிரச்சனைகளை ஒவ்வொன்றாகத் தீர்க்கிறது.
உதாரணமாக:
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
result = factorial(5)
print(result)
வெளியீடு:
120
4-மரம் மறுநிகழ்வு
ஒரு செயல்பாடு பல சுழல்நிலை அழைப்புகளாக மாறும்போது, நாம் மர மறுநிகழ்வு உலகில் நுழைகிறோம். மர மறுநிகழ்வில் ஒரு செயல்பாடு பல சுழல்நிலை அழைப்புகளை உருவாக்குகிறது, அவை ஒவ்வொன்றும் ஒரு மரத்தின் கிளைகள் செய்வது போலவே தனித்தனியான துணைப் பிரச்சனையைத் தீர்க்கிறது.
இந்த கிளை அமைப்பு பல வழிகளை ஒரே நேரத்தில் ஆய்வு செய்ய அனுமதிக்கிறது, சிக்கலான சிக்கல்களை சிறிய, ஒன்றோடொன்று தொடர்புடைய கூறுகளாக திறம்பட உடைக்கிறது.
உதாரணமாக:
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
result = fibonacci(6)
print(result)
வெளியீடு:
8
5-Nested Recursion
உள்ளமைக்கப்பட்ட மறுநிகழ்வு சுழல்நிலை பிரபஞ்சத்திற்கு ஒரு அற்புதமான அளவிலான சிக்கலான தன்மையை சேர்க்கிறது. இந்த மறுநிகழ்வு வடிவத்தில், ஒரு செயல்பாடு ஒரு சுழல்நிலை அழைப்பை மற்றொரு சுழல்நிலை அழைப்பிற்குள் ஒரு வாதமாக இணைக்கிறது.
உள் சுழல்நிலை அழைப்பு வெளிப்புற சுழல்நிலை அழைப்பைச் சார்ந்திருக்கும் மதிப்பில் செயல்படுகிறது. ஒவ்வொரு உள்ளமை அழைப்பிலும் சிக்கலானது வளர்கிறது, உள்ளமை சுழல்நிலை அழைப்புகளின் புதிரான வடிவத்தில் முடிவடைகிறது.
உதாரணமாக:
def nested_recursion(n):
if n > 100:
return n - 10
return nested_recursion(nested_recursion(n + 11))
result = nested_recursion(95)
print(result)
விளைவாக:
91
6-வால் மறுநிகழ்வு
டெயில் ரிகர்ஷன் என்பது சுழல்நிலை அல்காரிதம்களின் செயல்திறனை மேம்படுத்தக்கூடிய ஒரு தேர்வுமுறை நுட்பமாகும். வால் மறுநிகழ்வு, உருவாக்கம் கொண்ட செயல்பாட்டின் இறுதி செயலாக சுழல்நிலை அழைப்பு தோன்றுகிறது.
சுழல்நிலை அழைப்பைத் தொடர்ந்து சிறப்பான செயல்பாடுகள் எதுவும் இல்லாததால், கம்பைலர் அல்லது மொழிபெயர்ப்பாளர் அதை ஒரு எளிய ஜம்ப் மூலம் மாற்றுவதன் மூலம் மறுநிகழ்வை எளிதாக்கலாம்.
டெயில் கால் ஆப்டிமைசேஷன் என அழைக்கப்படும் இந்த மேம்படுத்தல் அணுகுமுறையானது, ஒவ்வொரு சுழல்நிலை அழைப்பிற்கும் ஒரு ஸ்டாக் சட்டத்தைத் தக்கவைத்துக்கொள்வதற்கான தேவையைக் குறைக்கிறது, இதன் விளைவாக மேம்பட்ட வேகம் மற்றும் குறைந்த நினைவகப் பயன்பாடு ஏற்படுகிறது.
உதாரணமாக:
def tail_factorial(n, result=1):
if n == 0:
return result
return tail_factorial(n - 1, result * n)
result = tail_factorial(5)
print(result)
அவுட்அவுட்:
120
7-வால் அல்லாத மறுநிகழ்வு
வால் மறுநிகழ்வுக்கு மாறாக, வால் அல்லாத மறுநிகழ்வு என்பது ஒரு செயல்பாட்டிற்குள் சுழல்நிலை அழைப்புக்குப் பிறகு செய்யப்படும் கூடுதல் செயல்பாடுகளை உள்ளடக்கியது. மேலும் செயல்களைச் செய்வதற்கு முன், ஒவ்வொரு சுழல்நிலை அழைப்பு முடிந்து திரும்ப வேண்டும்.
இதன் விளைவாக, அடிப்படை நிலை அடையும் வரை மற்றும் மறுநிகழ்வு முடியும் வரை, நிலுவையில் உள்ள செயல்பாடுகளின் அடுக்கு பராமரிக்கப்படுகிறது. வால் அல்லாத மறுநிகழ்வு அடிக்கடி அதிக நினைவகத்தைப் பயன்படுத்துகிறது மற்றும் வால் மறுநிகழ்வைக் காட்டிலும் குறைவான செயல்திறன் கொண்டது, ஆனால் இது பல்வேறு சிக்கல்களைச் சமாளிப்பதற்கான ஒரு பயனுள்ள கருவியாகும்.
உதாரணமாக:
def non_tail_sum(n):
if n == 0:
return 0
return n + non_tail_sum(n - 1)
result = non_tail_sum(5)
print(result)
வெளியீடு:
15
மடக்கு
மறுநிகழ்வு என்பது நிரலாக்கத்தில் ஒரு புதிரான கருத்தாகும். சிக்கலான சிக்கல்களை மீண்டும் மீண்டும், சுய-குறிப்பு முறையில் சமாளிக்க இது அனுமதிக்கிறது.
இது சிக்கல்களைப் பற்றி சிந்திக்கவும் தீர்க்கவும் ஒரு தனித்துவமான முறையை வழங்குகிறது, அவற்றை சிறிய, மேலும் சமாளிக்கக்கூடிய பகுதிகளாக உடைக்கிறது. இருப்பினும், மறுநிகழ்வுடன் பணிபுரியும் போது, சில புள்ளிகளுக்கு கவனம் செலுத்துவது மிகவும் முக்கியமானது.
மறுநிகழ்வு முடிவுக்கு வர அனுமதிக்கும் பொருத்தமான அடிப்படை நிகழ்வுகளை நீங்கள் அடையாளம் காண வேண்டும். அவை இல்லாவிட்டால், செயல்பாடு தன்னைத்தானே எப்போதும் அழைக்கும்.
இரண்டாவதாக, கையில் உள்ள சூழ்நிலையின் அடிப்படையில், பொருத்தமான வகையான மறுநிகழ்வைத் தேர்ந்தெடுப்பது மிகவும் திறமையான மற்றும் நேர்த்தியான தீர்வுகளுக்கு வழிவகுக்கும். கையில் உள்ள பிரச்சனைக்கு எது சிறந்தது என்பதைக் கண்டறிய முயற்சிக்கவும். பரந்த மறுநிகழ்வு ஆழங்களுடன் பணிபுரியும் போது, ஸ்டாக் ஓவர்ஃப்ளோ போன்ற சாத்தியமான ஆபத்துகள் குறித்து எச்சரிக்கையாக இருங்கள்.
ஒரு பதில் விடவும்