Apa sampeyan wis kejiret ing siklus sing katon ora ana pungkasane yen masalah terus dadi pecahan sing luwih cilik?
Yen mangkono, sampeyan bisa uga wis teka ing jagad rekursi sing nyenengake. Sanajan katon angel dimangerteni, aja kuwatir! Ing kirim iki, kita bakal nglakokake perjalanan sing menarik kanggo sinau babagan jinis rekursi.
Dadi gesper munggah nalika kita njelajah akeh pendekatan rekursif. Siapke mlebu ing alam rekursi sing nggumunake lan mirsani kemampuan sing luar biasa kanggo ngrampungake masalah sing rumit.
Apa Persis Rekursi?
Ing tembung dhasar, rekursi minangka teknik pemrograman sing kuat sing kalebu fungsi sing diarani nalika eksekusi. Iku kaya mentheleng menyang pangilon lan ndeleng gambar ing jero gambar, asil ing siklus poto-referensial.
Kita bisa ngatasi masalah gedhe nggunakake rekursi kanthi dibagi dadi subproblem sing luwih cilik lan bisa diatur.
Iku padha kanggo sijine bebarengan jigsaw, ngendi siji Piece pranala menyang bagean liyane kanggo gawé gambar lengkap. Rekursi ngidini kita ngrampungake masalah kanthi cara sing elegan lan efisien kanthi mbaleni instruksi sing padha karo macem-macem input.
1-Rekursi Langsung
Rekursi langsung minangka jinis rekursi sing paling dhasar, ing ngendi sawijining fungsi diarani langsung. Iki mbutuhake mbagi masalah sing bermasalah dadi subproblem sing luwih cilik nganti kasus dhasar diraih, sing ndadékaké mandap.
Fungsi rekursif nelpon dhewe karo macem-macem masukan, mbisakake eksekusi pesawat padha instruksi kanggo bola. Saben invocation dibangun ing sadurunge, progresif nyedhaki kasus dhasar sing nyebabake rekursi rampung.
Ayo dipriksa conto iki.
def countdown(n):
if n <= 0:
return
print(n)
countdown(n - 1)
countdown(5)
Output:
5
4
3
2
1
2-Rekursi Ora Langsung
Rekursi ora langsung nambahake corak sing nyenengake menyang jalur rekursif. Beda karo rekursi langsung, sing nyakup sawijining fungsi kanthi jelas nelpon dhewe, rekursi ora langsung kalebu rantai panggilan fungsi.
Siji fungsi nelpon liyane, sing banjur bisa nelpon fungsi asli utawa fungsi liyane sing pungkasanipun bali menyang asline. Panggilan fungsi web sing saling gegandhengan iki ngasilake tarian sing nyenengake ing ngendi sawetara fungsi kolaborasi kanggo ndandani masalah.
Conto:
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)
Output:
A: 3
B: 2
A: 1
3-Rekursi Linear
Coba lelungan mudhun ing rute sing lurus, siji-sijine, nganti tekan tujuan sampeyan. Teknik urutan iki diwujudake kanthi rekursi linier, ing ngendi sawijining fungsi nindakake panggilan rekursif siji ing saben pengulangan fungsi.
Kanthi saben telpon rekursif, proses rekursif nyedhaki kasus dhasar kanthi ngurangi ukuran masalah. Diterusake kanthi cara sing jelas lan linier, ngrampungake subproblem siji-sijine nganti tekan jawaban pungkasan.
Conto:
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
result = factorial(5)
print(result)
Output:
120
4-Rekursi Wit
Nalika fungsi dadi sawetara panggilan rekursif, kita mlebu ing jagad rekursi wit. Fungsi ing rekursi wit ngasilake akeh panggilan rekursif, sing saben-saben ngrampungake subproblem sing kapisah, kaya sing ditindakake cabang-cabang wit.
Struktur percabangan iki ngidini kanggo diselidiki bebarengan sawetara rute, èfèktif break mudhun masalah rumit menyang cilik, komponen interrelated.
Conto:
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
result = fibonacci(6)
print(result)
Output:
8
5-Rekursi Nested
Rekursi bersarang nambah tingkat kerumitan sing nyenengake kanggo alam semesta rekursif. Ing wangun rekursi iki, sawijining fungsi nggabungake panggilan rekursif minangka argumen ing telpon rekursif liyane.
Panggilan rekursif batin tumindak ing nilai sing gumantung marang panggilan rekursif njaba. Kerumitan tuwuh kanthi saben panyuwunan bersarang, sing pungkasane dadi pola panggilan rekursif sing nyenengake.
Conto:
def nested_recursion(n):
if n > 100:
return n - 10
return nested_recursion(nested_recursion(n + 11))
result = nested_recursion(95)
print(result)
Asil:
91
6-Rekursi buntut
Rekursi buntut minangka teknik optimasi kanggo algoritma rekursif sing bisa ningkatake kinerja. Telpon rekursif katon minangka tumindak pungkasan saka fungsi karo rekursi buntut, nggawe.
Amarga ora ana operasi sing luar biasa sawise telpon rekursif, kompiler utawa juru basa bisa nyederhanakake rekursi kanthi ngganti kanthi lompatan sing prasaja.
Pendekatan optimasi iki, dikenal minangka optimasi telpon buntut, nyuda requirement kanggo saben telpon rekursif kanggo nahan pigura tumpukan, asil ing kacepetan meningkat lan nggunakake memori ngisor.
Conto:
def tail_factorial(n, result=1):
if n == 0:
return result
return tail_factorial(n - 1, result * n)
result = tail_factorial(5)
print(result)
metu:
120
7-Rekursi Non-buntut
Beda karo rekursi buntut, rekursi non-buntut kalebu aktivitas ekstra sing ditindakake sawise panggilan rekursif ing sawijining fungsi. Sadurunge tumindak maneh bisa ditindakake, saben telpon rekursif kudu rampung lan bali.
Akibaté, nganti kasus dhasar tekan lan rekursi rampung, tumpukan operasi sing luar biasa tetep. Rekursi non-buntut kerep nggunakake memori luwih akeh lan kurang efisien tinimbang rekursi buntut, nanging isih minangka alat sing mbiyantu kanggo ngatasi macem-macem masalah.
Conto:
def non_tail_sum(n):
if n == 0:
return 0
return n + non_tail_sum(n - 1)
result = non_tail_sum(5)
print(result)
Output:
15
Bungkus
Rekursi minangka konsep sing nyenengake ing pemrograman. Iki ngidini kita ngatasi masalah sing rumit kanthi cara rekursif lan referensial.
Nawakake cara sing beda kanggo mikir lan ngrampungake masalah, dipérang dadi potongan sing luwih cilik lan bisa diatur. Nalika nggarap rekursi, Nanging, iku kritis kanggo nggunakake mbayar manungsa waé kanggo sawetara TCTerms.
Sampeyan kudu ngenali kasus dhasar sing cocog sing ngidini rekursi rampung. Yen ora ana, fungsi kasebut bisa terus nelpon dhewe ing salawas-lawase.
Kapindho, adhedhasar skenario sing ana, milih jinis rekursi sing cocog bisa nyebabake solusi sing luwih efisien lan elegan. Coba golek apa sing paling apik kanggo masalah ing tangan. Nalika nggarap ambane rekursi sing amba, waspada marang bebaya potensial kayata tumpukan tumpukan.
Ninggalake a Reply