Efa tratran'ny tsingerina toa tsy misy fiafarana ve ianao, izay tsy mitsaha-mitombo ny olana amin'ny ampahany kely kokoa?
Raha izany no izy, dia mety ho tonga amin'ny tontolon'ny recursion ianao. Na dia toa sarotra aza ny mahazo azy, aza manahy! Amin'ity lahatsoratra ity, handeha amin'ny dia mahaliana isika hianarana momba ireo karazana recursions.
Noho izany, miomàna rehefa mandinika fomba fijery miverimberina maro. Miomàna hiditra ao amin'ny tontolon'ny recursion mahavariana ary diniho ny fahaizany miavaka amin'ny famahana olana sarotra.
Inona marina no atao hoe Recursions?
Raha lazaina amin'ny teny fototra, ny recursion dia teknika fandaharana mahery vaika izay misy fiasa miantso ny tenany mandritra ny famonoana. Toy ny mibanjina fitaratra sy mahita sary ao anatin'ny sary iray izany, ka miteraka tsingerim-pandinihana tena.
Azontsika atao ny mamaha olana lehibe amin'ny fampiasana recursion amin'ny fizarana azy ireo ho subproblema kely kokoa sy azo fehezina.
Mitovitovy amin'ny fametrahana jigsaw izany, izay mampifandray ny ampahany iray amin'ny ampahany hafa mba hamokarana sary feno. Ny recursion dia ahafahantsika mamaha olana amin'ny fomba kanto sy mahomby amin'ny famerimberenana ireo toromarika mitovy amin'ny fampidirana isan-karazany.
1-Recursion mivantana
Ny recursion mivantana no karazana recursion fototra indrindra, izay miantso ny tenany mivantana ny asa iray. Tafiditra ao anatin'izany ny fizarana olana manahirana ho subproblema kely kokoa mandra-pahatongan'ny tranga fototra iray, izay mitarika amin'ny fampitsaharana.
Ny asa recursive dia miantso ny tenany amin'ny fampidirana isan-karazany, ahafahana mamerina ny fanatanterahana ny toromarika mitovy. Ny fiantsoana tsirairay dia miorina amin'ny teo aloha iray, manakaiky tsikelikely ny tranga fototra izay mampitsahatra ny famerenana.
Andeha hojerentsika ity ohatra ity.
def countdown(n):
if n <= 0:
return
print(n)
countdown(n - 1)
countdown(5)
Fivoahana:
5
4
3
2
1
2-Famerenana ankolaka
Ny recursive ankolaka dia manampy fiolanana manitikitika ny lalana miverimberina. Mifanohitra amin'ny recursion mivantana, izay ahitana asa iray mitonona mazava ny tenany, ny recursion ankolaka dia misy rojom-pifandraisan'ny antso.
Ny asa iray dia miantso iray hafa, izay afaka miantso ny asa tany am-boalohany na asa hafa izay miverina amin'ny voalohany. Ity tranonkalan'ny antso an-tariby mifamatotra ity dia mamokatra dihy manaitra izay iarahan'ny asa maro hamahana olana.
ohatra:
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)
Fivoahana:
A: 3
B: 2
A: 1
3- Linear Recursion
Eritrereto ny dia iray midina amin'ny lalana mahitsy, tsikelikely, mandra-pahatonganao amin'ny tanjonao. Ity teknika manaraka ity dia aseho amin'ny alàlan'ny recursion linear, izay ahafahan'ny asa iray manao antso miverimberina amin'ny famerenan'ny asa tsirairay.
Isaky ny antso miverimberina, ny dingana miverimberina dia manakaiky kokoa ny tranga fototra amin'ny alàlan'ny fampidinana ny haben'ny olana. Mizotra amin'ny fomba mazava sy mirindra izy io, mamaha ny olana isan-karazany mandra-pahatongan'ny valiny farany.
ohatra:
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
result = factorial(5)
print(result)
Fivoahana:
120
4-Famerenana hazo
Rehefa misampana amin'ny antso miverimberina maromaro ny asa iray, dia miditra amin'ny tontolon'ny recursive hazo isika. Ny fiasa amin'ny recursive hazo dia miteraka antso miverimberina, izay samy mamaha ny olana misaraka, toy ny ataon'ny sampan'ny hazo.
Ity rafitra sampana ity dia ahafahan'ny fanadihadiana miaraka amin'ny lalana maromaro, manapaka amin'ny fomba mahomby ireo olana sarotra ho singa kely kokoa mifandray.
ohatra:
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
result = fibonacci(6)
print(result)
Fivoahana:
8
5-Recursion Nested
Ny recursive mitongilana dia manampy be pitsiny mampientam-po amin'ny tontolo miverimberina. Amin'ity endrika recursion ity, ny fiasa iray dia mampiditra antso miverimberina ho tohan-kevitra ao anatin'ny antso miverimberina.
Ny antso recursive anatiny dia miasa amin'ny sanda iray izay miankina amin'ny antso recursive ivelany. Mitombo ny fahasarotana miaraka amin'ny fiantsoana misy akany tsirairay, miafara amin'ny endrika mahaliana amin'ny antso miverimberina.
ohatra:
def nested_recursion(n):
if n > 100:
return n - 10
return nested_recursion(nested_recursion(n + 11))
result = nested_recursion(95)
print(result)
Result:
91
6-Famerenana ny rambo
Ny famerenan'ny rambony dia teknika fanatsarana ny algorithm recursive izay afaka manatsara ny fahombiazany. Ny antso miverimberina dia miseho ho hetsika farany amin'ny asa miaraka amin'ny famerenan'ny rambony, manao.
Satria tsy misy asa miavaka aorian'ny antso miverimberina, ny mpanangona na ny mpandika teny dia afaka manatsotra ny famerenana amin'ny alàlan'ny fanoloana azy amin'ny fitsambikinana tsotra.
Ity fomba fiasa fanatsarana ity, fantatra amin'ny anarana hoe tail call optimization, dia mampihena ny fepetra takiana amin'ny antso miverimberina mba hitazonana ny rafitra stack, ka miteraka hafainganam-pandeha sy fampiasana fahatsiarovana ambany kokoa.
ohatra:
def tail_factorial(n, result=1):
if n == 0:
return result
return tail_factorial(n - 1, result * n)
result = tail_factorial(5)
print(result)
mivoaka:
120
7-Famerenana tsy misy rambo
Mifanohitra amin'ny famerenana ny rambony, ny famerenana tsy misy rambo dia misy hetsika fanampiny atao aorian'ny antso miverimberina ao anatin'ny asa iray. Alohan'ny hanaovana hetsika hafa dia tsy maintsy feno sy miverina ny antso miverimberina.
Vokatr'izany, mandra-pahatongan'ny tranga fototra sy ny fiafaran'ny recursion, dia tazonina ny fitambaran'ny asa miavaka. Ny famerenana tsy misy rambo dia matetika mampiasa fitadidiana bebe kokoa ary tsy dia mahomby noho ny famerenana amin'ny rambony, saingy mbola fitaovana manampy amin'ny famahana olana isan-karazany.
ohatra:
def non_tail_sum(n):
if n == 0:
return 0
return n + non_tail_sum(n - 1)
result = non_tail_sum(5)
print(result)
Fivoahana:
15
Fonosy
Recursion dia hevitra manitikitika amin'ny fandaharana. Izy io dia mamela antsika hamaha olana sarotra amin'ny fomba miverimberina, mitodika amin'ny tena.
Manolotra fomba fieritreretana miavaka sy famahana olana izy io, manasaraka azy ireo ho ampahany kely kokoa sy azo fehezina. Rehefa miasa miaraka amin'ny recursion, na izany aza, dia zava-dehibe ny mampiasa tandremo ny teboka sasany.
Tokony hamantatra tranga fototra mety izay mamela ny fiverenana hifarana. Raha tsy eo izy ireo, dia mety mbola hiantso ny tenany ho mandrakizay ilay asa.
Faharoa, mifototra amin'ny scenario eo am-pelatanana, ny fisafidianana ny karazana recursion mety dia mety hitondra vahaolana mahomby sy kanto. Miezaha mitady izay mety indrindra amin'ny olana eo am-pelatanana. Rehefa miasa miaraka amin'ny halalin'ny recursion midadasika, tandremo ny loza mety hitranga toy ny fihoaran'ny stack.
Leave a Reply