ችግሩ ወደ ትናንሽ ቁርጥራጮች እየከፋፈለ በሚሄድበት ማለቂያ የሌለው በሚመስል ዑደት ውስጥ ገብተህ ታውቃለህ?
ከሆነ፣ ወደ አስደናቂው የመደጋገም ዓለም መጥተው ይሆናል። ለመረዳት አስቸጋሪ መስሎ ቢታይም አይጨነቁ! በዚህ ልኡክ ጽሁፍ ላይ ስለ ተደጋጋሚ የድግግሞሽ ዓይነቶች ለማወቅ ወደ አስደሳች ጉዞ እንሄዳለን።
ስለዚህ ብዙ ተደጋጋሚ አቀራረቦችን በምንመረምርበት ጊዜ ያዙሩ። ወደ አስደናቂው የተደጋጋሚነት ግዛት ለመግባት ይዘጋጁ እና የተወሳሰቡ ጉዳዮችን የመፍታት አስደናቂ ችሎታውን ይመልከቱ።
ድጋሚዎች በትክክል ምንድናቸው?
በመሠረታዊ ቃላቶች ፣ ተደጋጋሚነት በአፈፃፀም ወቅት እራሱን የሚጠራ ተግባርን የሚያካትት ኃይለኛ የፕሮግራም ዘዴ ነው። ልክ እንደ መስታወት ውስጥ ማፍጠጥ እና በምስሉ ውስጥ ምስልን እንደማየት ነው፣ ይህም ራስን የማመሳከሪያ ዑደት ያስከትላል።
ትልልቅ ጉዳዮችን ወደ ትናንሽ፣ የበለጠ ማስተዳደር ወደሚችሉ ንዑስ ችግሮች በመከፋፈል ተደጋጋሚነትን በመጠቀም ልንቋቋማቸው እንችላለን።
ሙሉ ስእል ለመስራት አንድ ቁራጭ ከሌሎች ክፍሎች ጋር የሚያገናኝበት ጂግሳውን ከመገጣጠም ጋር ተመሳሳይ ነው። መደጋገም ጉዳዮችን በሚያምር እና ቀልጣፋ በሆነ መንገድ ለመፍታት ያስችለናል ተመሳሳይ መመሪያዎችን ከተለያዩ ግብአቶች ጋር በመድገም።
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-Linear Recursion
አላማህ ላይ እስክትደርስ ድረስ አንድ እርምጃ በአንድ ቀጥተኛ መንገድ ላይ ጉዞህን አስብበት። ይህ ተከታታይ ቴክኒክ በመስመራዊ ድግግሞሽ የተካተተ ነው፣ በዚህ ውስጥ አንድ ተግባር በእያንዳንዱ ተግባር ድግግሞሽ ውስጥ አንድ ነጠላ ጥሪን ያከናውናል።
በእያንዳንዱ ተደጋጋሚ ጥሪ፣ የተደጋጋሚነት ሂደቱ የጉዳዩን መጠን በመቀነስ ወደ መሰረታዊ ጉዳይ ይጠጋል። የመጨረሻው መልስ እስኪገኝ ድረስ ንዑሳን ችግሮችን አንድ በአንድ በመፍታት ግልጽ እና ቀጥተኛ በሆነ መንገድ ይቀጥላል።
ለምሳሌ:
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-Nsted 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
መጠቅለል
መደጋገም በፕሮግራም አወጣጥ ውስጥ አስገራሚ ጽንሰ-ሀሳብ ነው። የተወሳሰቡ ችግሮችን በተደጋጋሚ፣ እራሳችንን በማጣቀሻነት እንድንፈታ ያስችለናል።
ችግሮችን ለማሰብ እና ለመፍታት የተለየ ዘዴን ያቀርባል, እነሱን ወደ ትናንሽ, የበለጠ ማስተዳደር ይችላሉ. ከተደጋጋሚነት ጋር ሲሰሩ ግን ለአንዳንድ ነጥቦች ትኩረት መስጠት አስፈላጊ ነው.
ድጋሚው እንዲቆም የሚፈቅዱ ተስማሚ መሰረታዊ ጉዳዮችን መለየት አለብዎት. እነሱ ከሌሉ, ተግባሩ እራሱን ለዘላለም መጥራት ሊቀጥል ይችላል.
በሁለተኛ ደረጃ, በእጁ ላይ ባለው ሁኔታ ላይ በመመስረት, ተገቢውን የመድገም አይነት መምረጥ የበለጠ ቀልጣፋ እና የሚያምር መፍትሄዎችን ያመጣል. በእጁ ውስጥ ለችግሩ ተስማሚ የሆነውን ለማግኘት ይሞክሩ. ከሰፊ የተደጋጋሚ ጥልቀት ጋር ሲሰሩ፣ እንደ የተደራረበ የውሃ ፍሰት ያሉ ሊሆኑ የሚችሉ አደጋዎችን ይወቁ።
መልስ ይስጡ