Je! umewahi kunaswa katika mzunguko unaoonekana kutoisha ambapo tatizo huweka matawi katika vipande vidogo?
Ikiwa ndivyo, huenda umekutana na ulimwengu wenye kusisimua wa kujirudia. Ingawa inaweza kuonekana kuwa ngumu kuelewa, usijali! Katika chapisho hili, tutaenda kwenye safari ya kuvutia ya kujifunza kuhusu aina za marudio.
Kwa hivyo fungamana tunapochunguza mbinu nyingi za kujirudia. Jitayarishe kuingia katika eneo la kuvutia la kujirudia na uangalie uwezo wake wa ajabu katika kutatua masuala magumu.
Marudio ni Nini Hasa?
Kwa maneno ya kimsingi, urejeshaji ni mbinu yenye nguvu ya programu inayojumuisha chaguo la kukokotoa linalojiita yenyewe wakati wa utekelezaji. Ni kama kutazama kwenye kioo na kuona picha ndani ya picha, na kusababisha mzunguko wa kujirejelea.
Tunaweza kushughulikia masuala makubwa kwa kutumia kujirudia kwa kuyagawanya katika matatizo madogo madogo yanayoweza kudhibitiwa zaidi.
Ni sawa na kuweka pamoja jigsaw, ambapo kipande kimoja huunganishwa na sehemu nyingine ili kutoa picha kamili. Urejeshaji huturuhusu kutatua masuala kwa njia ya kifahari na bora kwa kurudia seti sawa ya maagizo na ingizo mbalimbali.
1-Marudio ya moja kwa moja
Urejeshaji wa moja kwa moja ndio aina ya msingi zaidi ya urejeshaji, ambapo kipengele cha kukokotoa hujiita moja kwa moja. Inajumuisha kugawanya tatizo lenye matatizo katika matatizo madogo hadi kesi ya msingi ipatikane, ambayo husababisha kusitishwa.
Chaguo za kukokotoa za kujirudia hujiita kwa pembejeo mbalimbali, kuwezesha utekelezaji wa seti sawa ya maagizo kurudiwa. Kila ombi hujengwa juu ya yale ya awali, ikikaribia hatua kwa hatua kesi ya msingi ambayo husababisha kujirudia kuisha.
Hebu tuangalie mfano huu.
def countdown(n):
if n <= 0:
return
print(n)
countdown(n - 1)
countdown(5)
Matokeo:
5
4
3
2
1
2-Marudio yasiyo ya moja kwa moja
Urejeshaji usio wa moja kwa moja huongeza msokoto wa kuvutia kwa njia ya kujirudia. Kinyume na urejeshaji wa moja kwa moja, ambao unahusisha chaguo za kukokotoa zinazojiita yenyewe, urejeshaji usio wa moja kwa moja unajumuisha msururu wa simu za utendakazi.
Chaguo la kukokotoa moja huita lingine, ambalo linaweza kuita kitendakazi asilia au kitendakazi kingine chochote ambacho hatimaye kinarudi kwenye asili. Wavuti huu uliounganishwa wa simu za kukokotoa hutoa ngoma ya kusisimua ambapo vipengele kadhaa hushirikiana kutatua tatizo.
Mfano:
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)
Matokeo:
A: 3
B: 2
A: 1
3-Urejeshaji wa Mstari
Fikiria safari chini ya njia iliyonyooka, hatua moja baada ya nyingine, hadi ufikie lengo lako. Mbinu hii ya mfuatano inajumuishwa na urejeshaji wa mstari, ambapo chaguo za kukokotoa hufanya simu moja ya kujirudia katika kila marudio ya chaguo la kukokotoa.
Kwa kila simu inayojirudia, mchakato wa kujirudia husogea karibu na kesi ya msingi kwa kupunguza ukubwa wa suala. Huendelea kwa njia iliyo wazi na ya mstari, kusuluhisha maswala madogo moja baada ya nyingine hadi jibu la mwisho lifikiwe.
Mfano:
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
result = factorial(5)
print(result)
Matokeo:
120
4-Kurudi kwa Mti
Wakati kipengele cha kukokotoa kinapoingia katika miito kadhaa ya kujirudia, tunaingia katika ulimwengu wa kujirudia kwa miti. Chaguo la kukokotoa katika kujirudia kwa mti hutoa simu nyingi za kujirudia, ambazo kila moja hutatua tatizo dogo tofauti, kama vile matawi ya mti hufanya.
Muundo huu wa matawi huruhusu uchunguzi wa wakati mmoja wa njia kadhaa, kwa ufanisi kuvunja masuala magumu katika vipengele vidogo, vinavyohusiana.
Mfano:
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
result = fibonacci(6)
print(result)
Matokeo:
8
5-Nested Recursion
Nested recursion huongeza kiwango cha kusisimua cha utata kwa ulimwengu unaojirudia. Katika aina hii ya urejeshaji, chaguo za kukokotoa hujumuisha simu inayojirudia kama hoja ndani ya simu nyingine ya kujirudia.
Simu ya ndani ya kujirudia hufanya kazi kwa thamani ambayo inategemea simu ya kujirudia ya nje. Utata hukua kwa kila ombi lililowekwa, na kuhitimishwa kwa muundo unaovutia wa simu za kujirudia rudia.
Mfano:
def nested_recursion(n):
if n > 100:
return n - 10
return nested_recursion(nested_recursion(n + 11))
result = nested_recursion(95)
print(result)
Matokeo:
91
6-Mkia Kujirudia
Urejeshaji wa mkia ni mbinu ya uboreshaji kwa algoriti zinazojirudia ambazo zinaweza kuboresha utendakazi wao. Simu ya kujirudi inaonekana kama kitendo cha mwisho cha chaguo za kukokotoa chenye kujirudia kwa mkia, kutengeneza.
Kwa sababu hakuna utendakazi ambao haujakamilika kufuatia simu inayojirudia, mkusanyaji au mkalimani anaweza kurahisisha kujirudia kwa kuibadilisha na kuruka rahisi.
Mbinu hii ya uboreshaji, inayojulikana kama uboreshaji wa simu za mkia, hupunguza hitaji la kila simu inayojirudia ili kuhifadhi fremu ya rafu, hivyo kusababisha kasi iliyoimarishwa na matumizi ya chini ya kumbukumbu.
Mfano:
def tail_factorial(n, result=1):
if n == 0:
return result
return tail_factorial(n - 1, result * n)
result = tail_factorial(5)
print(result)
Nje:
120
7-Kujirudia Mkia
Kinyume na kujirudia kwa mkia, urejeshaji usio na mkia unahusisha shughuli za ziada zinazofanywa baada ya simu inayojirudia ndani ya chaguo la kukokotoa. Kabla ya hatua zozote zaidi kufanywa, kila simu inayorudiwa lazima ikamilike na kurejea.
Kwa hivyo, hadi kesi ya msingi ifikiwe na urejeshaji kumalizika, rundo la shughuli ambazo hazijakamilika hutunzwa. Urejeshaji usio na mkia mara kwa mara hutumia kumbukumbu zaidi na haifai kuliko urejeshaji wa mkia, lakini bado ni zana muhimu ya kushughulikia masuala mbalimbali.
Mfano:
def non_tail_sum(n):
if n == 0:
return 0
return n + non_tail_sum(n - 1)
result = non_tail_sum(5)
print(result)
Matokeo:
15
Maliza
Recursion ni dhana ya kuvutia katika programu. Inaturuhusu kushughulikia matatizo magumu kwa kujirudia, kujirejelea.
Inatoa mbinu mahususi ya kufikiria na kutatua matatizo, ikizigawanya katika vipande vidogo, vinavyoweza kudhibitiwa zaidi. Wakati wa kufanya kazi na kujirudia, hata hivyo, ni muhimu kutumia makini na baadhi ya pointi.
Unapaswa kutambua kesi za msingi zinazofaa zinazoruhusu kujirudia kuisha. Ikiwa hazipo, chaguo la kukokotoa linaweza kuendelea kujiita milele.
Pili, kwa kuzingatia hali iliyopo, kuchagua aina inayofaa ya kujirudia kunaweza kusababisha masuluhisho ya ufanisi zaidi na ya kifahari. Jaribu kutafuta kile kinachofaa zaidi kwa shida iliyo mkononi. Unapofanya kazi na kina kikubwa cha kujirudia, fahamu hatari zinazoweza kutokea kama vile kufurika kwa rafu.
Acha Reply