Èske w te janm pran nan yon sik w pèdi san fen kote yon pwoblèm kenbe branche nan pi piti fragman?
Si se konsa, ou ka te vin sou mond lan captivan nan repetisyon. Pandan ke li ka parèt difisil pou konprann, pa enkyete! Nan pòs sa a, nou pral ale nan yon vwayaj enteresan yo aprann sou kalite rekursion.
Se konsa, boukle moute pandan n ap eksplore anpil apwòch repetitif. Prepare w pou w antre nan domèn kaptivan repetisyon epi obsève kapasite remakab li nan rezoud pwoblèm konplike.
Ki sa ki ekzakteman Recursions?
Nan mo debaz yo, recursion se yon teknik pwogramasyon pwisan ki gen ladan yon fonksyon ki rele tèt li pandan ekzekisyon. Se tankou gade nan yon glas ak wè yon imaj andedan yon imaj, sa ki lakòz yon sik oto-referans.
Nou ka abòde gwo pwoblèm lè l sèvi avèk repetisyon lè nou divize yo an pi piti, plis pwoblèm jere.
Li sanble ak mete ansanm yon tèt, kote yon sèl pyès lyen ak lòt pati yo pwodwi yon foto konplè. Rekursion pèmèt nou rezoud pwoblèm nan yon fason elegant ak efikas lè nou repete menm seri enstriksyon yo ak divès kalite opinyon.
1-Rekursion dirèk
Rekursion dirèk se kalite ki pi fondamantal nan rekursion, kote yon fonksyon rele tèt li dirèkteman. Li enplike divize yon pwoblèm pwoblèm nan pi piti sous-pwoblèm jiskaske yon ka debaz reyalize, ki mennen nan revokasyon.
Fonksyon rekursif la rele tèt li ak divès kalite antre, sa ki pèmèt ekzekisyon an nan menm seri enstriksyon yo dwe repete. Chak envokasyon bati sou youn anvan an, pwogresifman apwoche ka debaz la ki lakòz recursion fini.
Ann tcheke egzanp sa a.
def countdown(n):
if n <= 0:
return
print(n)
countdown(n - 1)
countdown(5)
Sòti:
5
4
3
2
1
2-Rekursion endirèk
Rekursion endirèk ajoute yon tòde entrigan nan chemen an rekursif. Kontrèman ak recursion dirèk, ki enplike yon fonksyon klèman rele tèt li, recursion endirèk gen ladan yon chèn nan apèl fonksyon.
Yon fonksyon rele yon lòt, ki ka Lè sa a, rele fonksyon orijinal la oswa nenpòt lòt fonksyon ki finalman tounen nan orijinal la. Sa a entènèt entèkonekte nan apèl fonksyon pwodui yon dans captivan kote plizyè fonksyon kolabore pou rezoud yon pwoblèm.
Egzanp:
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)
Sòti:
A: 3
B: 2
A: 1
3-Lineyè Rekursion
Konsidere yon vwayaj sou yon wout dwat, yon etap nan yon tan, jiskaske ou rive nan objektif ou. Teknik sekans sa a se rekòmanse lineyè, kote yon fonksyon fè yon sèl apèl recursive nan chak iterasyon fonksyon.
Avèk chak apèl repetitif, pwosesis repetitif la ap deplase pi pre yon ka debaz lè li bese gwosè pwoblèm lan. Li kontinye nan yon fason klè ak lineyè, rezoud pwoblèm sub-pwoblèm youn nan yon tan jiskaske repons final la rive jwenn.
Egzanp:
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
result = factorial(5)
print(result)
Sòti:
120
4-Tree Recursion
Lè yon fonksyon branch nan plizyè apèl recursive, nou antre nan mond lan nan recursion pyebwa. Yon fonksyon nan rekursion pye bwa jenere anpil apèl repetitif, chak nan yo rezoud yon sous-pwoblèm separe, menm jan branch yo nan yon pye bwa fè.
Estrikti branch sa a pèmèt pou envestigasyon an similtane nan plizyè wout, efektivman kraze pwoblèm konplike nan pi piti, eleman ki gen rapò.
Egzanp:
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
result = fibonacci(6)
print(result)
Sòti:
8
5-Rekursion nich
Rekursion anbrike ajoute yon degre eksitan nan konpleksite nan linivè a repetitif. Nan fòm sa a nan recursive, yon fonksyon enkòpore yon apèl recursive kòm yon agiman nan yon lòt apèl recursive.
Entèn apèl recursive aji sou yon valè ki depann sou eksteryè apèl recursive. Konpleksite a ap grandi ak chak envokasyon enbrike, abouti nan yon modèl entrigan nan apèl recursive enbrike.
Egzanp:
def nested_recursion(n):
if n > 100:
return n - 10
return nested_recursion(nested_recursion(n + 11))
result = nested_recursion(95)
print(result)
Rezilta:
91
6-Rekursion ke
Rekursion ke se yon teknik optimize pou algoritm rekursif ki ka amelyore pèfòmans yo. Apèl la recursive parèt kòm aksyon final la nan yon fonksyon ak ke recursion, fè.
Paske pa gen okenn operasyon eksepsyonèl apre apèl rekursif la, konpilatè a oswa entèprèt la ka senplifye rekouvèsyon an lè li ranplase li ak yon so senp.
Apwòch optimize sa a, ke yo rekonèt kòm optimize apèl ke, diminye egzijans pou chak apèl rekursif kenbe yon ankadreman pile, sa ki lakòz vitès amelyore ak pi ba itilizasyon memwa.
Egzanp:
def tail_factorial(n, result=1):
if n == 0:
return result
return tail_factorial(n - 1, result * n)
result = tail_factorial(5)
print(result)
Soti:
120
7-Ki pa Peye-Recursion
Kontrèman ak recursion ke, ki pa ke recursion enplike aktivite siplemantè fèt apre apèl la recursive nan yon fonksyon. Anvan nenpòt lòt aksyon yo ka fèt, chak apèl rekursif dwe ranpli epi retounen.
Kòm yon konsekans, jiskaske ka debaz la rive epi rekursion la fini, yo kenbe yon pil operasyon eksepsyonèl. Rekursion ki pa ke yo souvan itilize plis memwa epi li mwens efikas pase rekursion ke, men li toujou yon zouti itil pou abòde yon varyete de pwoblèm.
Egzanp:
def non_tail_sum(n):
if n == 0:
return 0
return n + non_tail_sum(n - 1)
result = non_tail_sum(5)
print(result)
Sòti:
15
Wrap Up
Rekursion se yon konsèp entrigan nan pwogramasyon. Li pèmèt nou atake pwoblèm konplike nan yon fason repetitif, oto-referans.
Li ofri yon metòd diferan pou panse ak rezoud pwoblèm, kraze yo an pi piti, pi jere fragman. Lè w ap travay ak recursion, sepandan, li enpòtan pou itilize peye atansyon sou kèk pwen.
Ou ta dwe idantifye ka baz apwopriye ki pèmèt recursion a fini. Si yo pa prezan, fonksyon an ka kontinye rele tèt li pou tout tan.
Dezyèmman, ki baze sou senaryo a nan men, chwazi kalite ki apwopriye a nan rekursion ka mennen nan solisyon pi efikas ak elegant. Eseye jwenn sa ki pi bon pou pwoblèm nan men an. Lè w ap travay ak gwo pwofondè repetisyon, ou dwe konsyan de danje potansyèl tankou pile debòde.
Kite yon Reply