Naha anjeun kantos kajebak dina siklus anu katingalina teu aya tungtungna dimana masalahna terus bercabang kana fragmen anu langkung alit?
Lamun kitu, anjeun bisa jadi geus datang kana dunya enthralling of recursion. Sanaos sigana sesah ngartos, tong hariwang! Dina postingan ieu, urang bakal ngiringan perjalanan anu pikaresepeun pikeun diajar ngeunaan jinis rekursi.
Janten ngaitkeun nalika urang ngajalajah seueur pendekatan rekursif. Nyiapkeun pikeun asup ka alam rekursi anu pikaresepeun sareng perhatikeun kamampuan anu luar biasa dina ngarengsekeun masalah anu rumit.
Naon Persis Dupi Recursions?
Dina kecap dasar, recursion mangrupakeun téhnik programming kuat nu ngawengku hiji fungsi nelepon sorangan salila palaksanaan. Ieu kawas neuteup kana eunteung jeung ningali hiji gambar di jero hiji gambar, hasilna siklus timer referential.
Urang tiasa ngatasi masalah ageung nganggo rekursi ku ngabagi kana submasalah anu langkung alit, langkung tiasa diurus.
Éta sami sareng ngahijikeun jigsaw, dimana hiji sapotong nyambung ka bagian-bagian sanés pikeun ngahasilkeun gambar anu lengkep. Recursion ngamungkinkeun urang pikeun ngabéréskeun masalah sacara elegan sareng épisién ku cara ngulang set paréntah anu sami sareng sababaraha input.
1-Recursion langsung
Rekursi langsung mangrupikeun jinis rekursi anu paling dasar, dimana hiji fungsi langsung nelepon sorangan. Ieu merlukeun ngabagi masalah masalah kana subproblems leutik nepi ka kasus dasar kahontal, nu ngakibatkeun terminasi.
Fungsi rekursif nyauran sorangan ku rupa-rupa input, ngamungkinkeun palaksanaan set paréntah anu sami tiasa diulang. Unggal invocation diwangun dina hiji saméméhna, progressively nearing kasus dasar nu ngabalukarkeun recursion pikeun ngeureunkeun.
Hayu urang pariksa conto ieu.
def countdown(n):
if n <= 0:
return
print(n)
countdown(n - 1)
countdown(5)
kaluaran:
5
4
3
2
1
2-Recursion teu langsung
Rekursi teu langsung nambihan pulas anu pikaresepeun kana jalur rekursif. Kontras jeung rekursi langsung, nu ngalibatkeun hiji fungsi eksplisit nelepon sorangan, recursion teu langsung ngawengku ranté panggero fungsi.
Hiji fungsi nelepon sejen, nu lajeng bisa nelepon fungsi aslina atawa fungsi sejen nu tungtungna balik deui ka aslina. Telepon fungsi wéb anu saling nyambungkeun ieu ngahasilkeun tarian anu pikaresepeun dimana sababaraha fungsi kolaborasi pikeun ngalereskeun masalah.
contona:
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)
kaluaran:
A: 3
B: 2
A: 1
3-Linear Recursion
Mertimbangkeun lalampahan ka handap jalur lempeng, hiji hambalan dina hiji waktu, nepi ka anjeun anjog di obyektif Anjeun. Téhnik sekuensial ieu diwujudkeun ku rekursi linier, dimana hiji fungsi ngalaksanakeun sauran rekursif tunggal dina unggal pengulangan fungsi.
Kalawan unggal panggero recursive, prosés recursive ngalir ngadeukeutan ka base case ku nurunkeun ukuran masalah. Éta lumangsung dina cara anu jelas sareng linier, ngarengsekeun submasalah hiji-hiji dugi ka jawaban anu terakhir.
contona:
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
result = factorial(5)
print(result)
kaluaran:
120
4-Tangkal Recursion
Nalika fungsi hiji cabang kana sababaraha panggero recursive, urang asup ka dunya rekursi tangkal. Hiji fungsi dina recursion tangkal dibangkitkeun loba panggero recursive, nu masing-masing solves hiji subproblem misah, sagampil dahan tangkal ngalakukeun.
Struktur branching ieu ngamungkinkeun pikeun panalungtikan simultaneous sababaraha ruteu, éféktif ngarecah masalah pajeulit kana leutik, komponén interrelated.
contona:
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
result = fibonacci(6)
print(result)
kaluaran:
8
5-Nested Recursion
Rekursi bersarang nambihan tingkat pajeulitna anu pikaresepeun pikeun alam semesta rekursif. Dina bentuk rekursi ieu, hiji fungsi ngasupkeun panggero rekursif salaku argumen dina panggero rekursif sejen.
Sauran rekursif batin nindakkeun nilai anu gumantung kana sauran rekursif luar. Pajeulitna tumuwuh kalayan unggal invocation nested, culminating dina pola intriguing tina telepon rekursif nested.
contona:
def nested_recursion(n):
if n > 100:
return n - 10
return nested_recursion(nested_recursion(n + 11))
result = nested_recursion(95)
print(result)
hasilna:
91
6-Buntut Recursion
Rekursi buntut mangrupikeun téknik optimasi pikeun algoritma rekursif anu tiasa ningkatkeun kinerjana. Panggero rekursif némbongan salaku aksi ahir fungsi kalawan recursion buntut, nyieun.
Kusabab euweuh operasi beredar sanggeus panggero recursive, compiler atawa juru bisa simplify recursion ku ngaganti ku luncat basajan.
pendekatan optimasi ieu, katelah optimasi panggero buntut, ngurangan sarat pikeun unggal panggero recursive pikeun nahan pigura tumpukan, hasilna speed ditingkatkeun jeung pamakéan memori handap.
contona:
def tail_factorial(n, result=1):
if n == 0:
return result
return tail_factorial(n - 1, result * n)
result = tail_factorial(5)
print(result)
Kaluar:
120
7-Non-buntut Recursion
Kontras jeung rekursi buntut, rekursi non-buntut ngalibatkeun kagiatan tambahan dipigawé sanggeus panggero rekursif dina hiji fungsi. Saméméh lampah deui bisa dipigawé, unggal panggero rekursif kudu réngsé sarta balik.
Salaku konsekuensi, nepi ka kasus dasar geus ngahontal sarta recursion ends, tumpukan operasi beredar dijaga. Rekursi non-buntut sering ngagunakeun langkung seueur mémori sareng kirang éfisién tibatan rekursi buntut, tapi éta masih mangrupikeun alat anu ngabantosan pikeun ngatasi sababaraha masalah.
contona:
def non_tail_sum(n):
if n == 0:
return 0
return n + non_tail_sum(n - 1)
result = non_tail_sum(5)
print(result)
kaluaran:
15
Bérésan
Recursion mangrupa konsép intriguing dina programming. Hal ieu ngamungkinkeun urang pikeun tackle masalah pajeulit dina recursive, manner timer referential.
Éta nawiskeun metode anu béda pikeun mikir sareng ngarengsekeun masalah, ngarecahna kana sakumpulan anu langkung alit, langkung tiasa diurus. Nalika damel sareng rekursi, kumaha ogé, penting pikeun nengetan sababaraha titik.
Anjeun kedah ngaidentipikasi kasus dasar anu cocog anu ngamungkinkeun rekursi réngsé. Mun aranjeunna henteu hadir, fungsi nu bisa neruskeun nelepon sorangan salawasna.
Kadua, dumasar kana skenario di leungeun, milih jenis luyu recursion bisa ngakibatkeun solusi leuwih efisien sarta elegan. Coba pikeun manggihan naon gawéna pangalusna pikeun masalah dina leungeun. Nalika damel sareng jero rekursi anu ageung, perhatikeun poténsi bahaya sapertos tumpukan tumpukan.
Leave a Reply