Kev nkag siab niaj hnub ntawm kev rov ua dua: txhais ntawm kev ua haujlwm thiab nkag mus rau nws los ntawm sab nraud thiab los ntawm cov haujlwm no. Nws ntseeg hais tias recursion yog yug los ntawm lej: factorial xam, infinite series, fractals, txuas ntxiv fractions … Txawm li cas los xij, recursion muaj nyob txhua qhov chaw. Lub hom phiaj kev cai lij choj "xav txog" rov ua dua raws li lawv lub ntsiab algorithm thiab daim ntawv qhia (existence) tsis yog ntau ntawm cov khoom ntawm lub ntiaj teb cov khoom, tab sis feem ntau lub ntsiab algorithm ntawm txav.
Cov neeg ntawm ntau yam tshwj xeeb hauv ntau yam kev tshawb fawb thiab thev naus laus zis siv cov txheej txheem rov ua dua f (x), qhov "x ~ /=f (x)". Kev ua haujlwm uas hu nws tus kheej yog ib qho kev daws teeb meem, tab sis tsim thiab nkag siab txog qhov kev daws teeb meem no yog, feem ntau, txoj haujlwm nyuaj heev.
Nyob rau hauv ancient sij hawm, recursion yog siv los ua kom lub palace qhov chaw. Los ntawm lub kaw lus ntawm daim iav qhia ntawm ib leeg, koj tuaj yeem tsim cov teebmeem peb-dimensional spatial zoo kawg nkaus. Tab sis nws puas yooj yim to taub li caskho cov iav no? Nws yog qhov nyuaj dua los txiav txim siab qhov twg lub ntsiab lus hauv qhov chaw nyob, cuam tshuam los ntawm ntau daim iav.
Recursion, recursive algorithms: lub ntsiab lus thiab syntax
Qhov teeb meem, uas yog tsim los ntawm kev rov ua ib ntu ntawm kev ua haujlwm, tuaj yeem daws tau rov ua dua. Ib qho yooj yim algorithm (xws li quadratic equation, ib tsab ntawv kom populate nplooj ntawv web nrog cov ntaub ntawv, nyeem ntawv, xa lus …) tsis tas yuav recursion.
qhov sib txawv tseem ceeb ntawm cov algorithm uas tso cai rau kev daws teeb meem:
- muaj ib qho algorithm uas yuav tsum tau ua ntau zaus;
- algorithm xav tau cov ntaub ntawv hloov pauv txhua lub sijhawm;
- lub algorithm tsis tas yuav hloov txhua lub sijhawm;
- muaj ib qho xwm txheej kawg: lub algorithm yog recursive - tsis infinite.
Feem ntau, nws tsis tuaj yeem hais tias kev tua ib zaug yog qhov tsim nyog rau qhov tsis muaj laj thawj rau kev rov ua dua. Koj kuj tsis tuaj yeem xav tau qhov yuav tsum tau ua zaum kawg: kev rov ua tsis tiav muaj lawv tus kheej.
Cov algorithm yog recursive: thaum ib ntu ntawm kev ua haujlwm tau ua ntau zaus, ntawm cov ntaub ntawv hloov pauv txhua zaus thiab muab cov txiaj ntsig tshiab txhua zaus.
Recursion formula
Kev nkag siab txog lej ntawm kev rov ua dua thiab nws cov lus piv txwv hauv kev ua haujlwm txawv. Kev ua lej, txawm tias muaj cov cim qhia txog kev ua haujlwm, tab sis kev ua lej yog lej ntawm qhov kev txiav txim siab dua.
Ib txoj kev sau tau zoo yog zoo li daim iav ntawm kev txawj ntse ntawm nws tus sau. Generalcov qauv recursion hauv programming yog "f(x)", qhov "x ~/=f(x)" muaj tsawg kawg yog ob txhais lus. Ntawm no "~" yog qhov zoo sib xws lossis tsis muaj qhov tshwm sim, thiab "=" yog qhov muaj qhov tshwm sim ntawm qhov ua haujlwm.
Kev xaiv thawj: cov ntaub ntawv dynamics.
- function "f(x)" muaj qhov rov ua dua thiab hloov tsis tau;
- "x" thiab qhov tshwm sim "f(x)" muaj qhov tseem ceeb tshiab txhua lub sijhawm, qhov tshwm sim "f(x)" yog qhov tshiab "x" parameter ntawm txoj haujlwm no.
qhov kev xaiv thib ob: code dynamics.
- function "f(x)" muaj ob peb algorithms uas refine (kuaj) cov ntaub ntawv;
- cov ntaub ntawv tsom xam - ib feem ntawm txoj cai thiab kev siv ntawm recursive algorithms uas ua qhov kev txiav txim siab - qhov thib ob ntawm txoj cai;
- qhov tshwm sim ntawm kev ua "f(x)" tsis yog.
Tsis muaj qhov tshwm sim li qub. Programming tsis yog lej, ntawm no qhov tshwm sim tsis tas yuav tsum tau nthuav dav. Ib txoj haujlwm recursive tuaj yeem txheeb xyuas qhov chaw thiab populate cov ntaub ntawv, lossis instantiate cov khoom raws li cov khoom nkag.
Data thiab recursion
Programming recursive algorithms tsis yog hais txog kev suav cov factorial, uas qhov kev ua haujlwm tau txais txhua lub sijhawm muab tus nqi uas yog ib qho ntau lossis tsawg dua ib qho - qhov kev xaiv siv nyob ntawm tus neeg tsim khoom nyiam.
Nws tsis muaj teeb meem li cas lub factorial "8!",algorithm uas nruj me ntsis raws li cov qauv no.
Cov ntaub ntawv ua tiav yog "kev ua lej" ntawm qhov kev txiav txim sib txawv kiag li. Recursive functions thiab algorithms ntawm no ua haujlwm ntawm cov tsiaj ntawv, lo lus, kab lus, kab lus thiab kab lus. Txhua qib tom ntej no siv tus dhau los.
Cov ntaub ntawv nkag mus tau txheeb xyuas ntau yam ntawm cov xwm txheej, tab sis cov txheej txheem kev tshuaj xyuas feem ntau rov ua dua. Nws ua rau tsis muaj kev nkag siab los sau cov algorithms tshwj xeeb rau txhua qhov sib txawv ntawm cov dej nkag. Yuav tsum muaj ib tug functionality. Ntawm no, recursive algorithms yog cov piv txwv ntawm yuav ua li cas los tsim cov kwj tawm uas tsim nyog rau cov tswv yim. Qhov no tsis yog qhov tso zis ntawm recursive algorithm, tab sis nws yog qhov xav tau thiab tsim nyog daws.
Abstraction, recursion and OOP
Object-oriented programming (OOP) thiab recursion yog cov chaw sib txawv, tab sis lawv ua tiav ib leeg. Abstraction tsis muaj dab tsi cuam tshuam nrog recursion, tab sis los ntawm lub lens ntawm OOP nws tsim muaj peev xwm ntawm kev siv cov ntsiab lus recursion.
Piv txwv li, cov ntaub ntawv raug muab cais tawm thiab cov ntawv, cov lus, kab lus, kab lus thiab kab lus raug qhia cais. Obviously, tus tsim tawm yuav muab rau kev tsim cov piv txwv ntawm cov khoom ntawm tsib hom no thiab muab kev daws teeb meem ntawm recursive algorithms ntawm txhua qib.
Meanwhile, yog tias nyob rau theem ntawm cov ntawv "tsis muaj lub ntsiab lus hauv kev nrhiav lub ntsiab lus", ces cov ntsiab lus tshwm nyob rau theem ntawm cov lus. Koj tuaj yeem faib cov lus rau hauv verbs, nouns, adverbs, prepositions… Koj tuaj yeem mus ntxiv thiab txhais rooj plaub.
Ntawm cov kab lus, cov ntsiab lus yog ntxiv los ntawm cov cim cim thiab cov laj thawjkev sib txuas lus. Nyob rau theem ntawm kab lus, pom ib qib zoo meej ntawm cov lus hais, thiab ib kab lus tuaj yeem suav tias yog kev xav tiav.
Txoj kev txhim kho yam khoom taw qhia ua ntej txiav txim siab qhov qub txeeg qub teg ntawm cov khoom thiab txoj hauv kev thiab tawm tswv yim los pib lub hierarchy ntawm cov khoom nrog kev tsim cov poj koob yawm txwv tsis meej. Nyob rau tib lub sijhawm, tsis muaj qhov tsis ntseeg, kev tshuaj xyuas ntawm txhua tus xeeb leej xeeb ntxwv yuav rov ua dua thiab yuav tsis txawv ntau dhau ntawm cov txheej txheem hauv ntau txoj haujlwm (cov ntawv, lo lus, kab lus thiab kab lus). Cov kab lus, zoo li kev xav tiav, yuav sawv tawm ntawm cov npe no, tab sis lawv tsis yog qhov tseem ceeb.
Nws yog ib qho tseem ceeb uas feem ntau ntawm cov algorithm tuaj yeem tsim los ntawm qib poj koob yawm txwv paub daws teeb, ua kom nws nyob rau theem ntawm txhua tus xeeb leej xeeb ntxwv nrog cov ntaub ntawv thiab cov txheej txheem hu ua los ntawm qib paub daws teeb. Nyob rau hauv cov ntsiab lus no, abstraction qhib lub qab ntug tshiab rau recursion.
Keeb kwm ntawm OOP
OOP tau los rau lub ntiaj teb ntawm software ob zaug, txawm hais tias qee tus kws tshaj lij tuaj yeem tawm qhov tshwm sim ntawm huab xam thiab cov tswv yim niaj hnub hais txog cov khoom thiab cov chav kawm ua ib puag ncig tshiab hauv kev txhim kho IT technologies.
Cov ntsiab lus "khoom" thiab "lub hom phiaj" hauv cov ntsiab lus niaj hnub ntawm OOP feem ntau yog los ntawm 50s thiab 60s ntawm lub xyoo pua xeem, tab sis lawv muaj feem xyuam nrog 1965 thiab qhov tshwm sim ntawm Simula, Lisp, Algol, Smalltalk.
Nyob rau lub sijhawm ntawd, kev ua haujlwm tsis tau tsim tshwj xeeb thiab tsis tuaj yeem teb tau txaus rau cov tswv yim hloov pauv. Kev tawm tsam ntawm cov tswv yim thiab cov qauv kev ua haujlwm (C / C ++ thiab Pascal - feem ntau) tseem nyob deb, thiab cov ntaub ntawv tseem tau tsim tawm.
Nyob rau hauv lub lig 80s thiab thaum ntxov 90s, cov khoom tshwm nyob rau hauv Pascal thiab txhua leej txhua tus nco qab cov chav kawm nyob rau hauv C / C ++ - qhov no cim ib tug tshiab puag ncig ntawm kev txaus siab nyob rau hauv OOP thiab nws yog ces cov cuab yeej, feem ntau programming lus, los ua tsis tau. tsuas yog txhawb nqa cov tswv yim taw qhia, tab sis hloov kho raws li.
Tau kawg, yog tias yav dhau los recursive algorithms tsuas yog ua haujlwm siv nyob rau hauv cov cai dav dav ntawm qhov kev pab cuam, tam sim no recursion tuaj yeem dhau los ua ib feem ntawm cov khoom ntawm cov khoom (chav kawm), uas muab cov sijhawm nthuav hauv cov ntsiab lus ntawm kev qub txeeg qub teg.
Txoj kev niaj hnub OOP
Kev txhim kho ntawm OOP pib tshaj tawm cov khoom (cov chav kawm) raws li kev sau cov ntaub ntawv thiab cov khoom (txoj kev). Qhov tseeb, nws yog hais txog cov ntaub ntawv uas muaj syntax thiab lub ntsiab lus. Tab sis tom qab ntawd nws tsis tuaj yeem nthuav qhia OOP ua ib qho cuab yeej los tswj cov khoom tiag.
OOP tau dhau los ua ib qho cuab yeej rau kev tswj hwm "lub computer xwm" cov khoom. Ib tsab ntawv, ib lub pob, cov ntawv qhia zaub mov, cov ntawv qhia zaub mov, lub cim npe hauv qhov browser qhov rai yog qhov khoom. Tab sis tsis yog lub tshuab, khoom noj khoom haus, lo lus, lossis kab lus. Cov khoom tiag tiag tau nyob sab nraud ntawm cov phiaj xwm taw qhia, thiab cov cuab yeej siv khoos phis tawj tau coj mus rau lub neej tshiab.
Vim qhov sib txawv ntawm cov lus programming nrov, ntau yam lus ntawm OOP tau tshwm sim. Nyob rau hauv cov nqe lus ntawm semantics, lawv xyaum sib npaug, thiab lawv tsom mus rau lub instrumental sphere, thiab tsis nyob rau hauv lub thov ib tug, ua rau nws muaj peev xwm coj cov lus piav qhia ntawm cov khoom tiag tiag tshaj.algorithms thiab xyuas kom meej lawv tus ntoo khaub lig-platform thiab tus ntoo khaub lig-lus "existence".
Txuas thiab muaj nuj nqi hu mechanisms
Mechanisms rau kev hu ua haujlwm (cov txheej txheem, algorithms) yuav tsum tau dhau cov ntaub ntawv (tsis suav), rov qab qhov tshwm sim, thiab nco ntsoov qhov chaw nyob ntawm tus neeg teb xov tooj uas yuav tsum tau txais kev tswj hwm tom qab ua haujlwm (txheej txheem) ua tiav.
Feem ntau, pawg yog siv rau lub hom phiaj no, txawm hais tias cov lus programming lossis tus tsim tawm nws tus kheej tuaj yeem muab ntau yam kev xaiv rau kev hloov pauv. Niaj hnub nimno programming lees paub tias lub npe ntawm kev ua haujlwm tuaj yeem tsis yog qhov ntsuas xwb: nws tuaj yeem tsim tau thaum lub sijhawm ua tiav ntawm algorithm. Ib qho algorithm tuaj yeem tsim tau thaum ua lwm qhov algorithm.
Lub tswv yim ntawm recursive algorithms, thaum lawv cov npe thiab lub cev tuaj yeem txiav txim siab thaum lub sijhawm tsim cov haujlwm (xaiv qhov xav tau algorithm), txuas ntxiv rov ua dua tsis yog yuav ua li cas, tab sis kuj yog leej twg yuav tsum tau ua. ua nws. Xaiv ib qho algorithm los ntawm nws lub npe "lub ntsiab lus" tau cog lus, tab sis tsim teeb meem.
Recursiveness ntawm ib pawg haujlwm
Koj tsis tuaj yeem hais tias lub algorithm yog recursive thaum nws hu nws tus kheej thiab qhov ntawd yog nws. Programming tsis yog dogma, thiab lub tswv yim ntawm recursiveness tsis yog ib qho tshwj xeeb uas yuav tsum tau hu koj tus kheej los ntawm lub cev ntawm koj tus kheej algorithm.
Cov ntawv thov siv tau tsis yog ib txwm muab cov tshuaj huv. Feem ntau, cov ntaub ntawv thawj zaug yuav tsum tau npaj, thiab cov txiaj ntsig ntawm kev hu rov qab yuav tsum tau txheeb xyuas hauv cov ntsiab lus ntawm tag nrho cov teeb meem (tag nrho algorithm) hauvzuag qhia tag nrho.
Qhov tseeb, tsis yog ua ntej lub luag haujlwm recursive hu ua, tab sis kuj tom qab nws ua tiav, lwm qhov kev pab cuam tuaj yeem hu ua. Yog tias tsis muaj teeb meem tshwj xeeb nrog kev hu: qhov rov ua haujlwm A() hu rau txoj haujlwm B(), uas ua ib yam dab tsi thiab hu rau A(), ces tam sim ntawd muaj teeb meem nrog kev rov qab los ntawm kev tswj. Tom qab ua tiav qhov kev hu rov qab, kev ua haujlwm A() yuav tsum tau txais kev tswj hwm thiaj li rov hu B(), uas yuav hu rov qab. Rov qab tswj raws li nws yuav tsum nyob rau hauv kev txiav txim ntawm pawg rov qab rau B() yog qhov tsis ncaj ncees lawm kev daws teeb meem.
Tus programmer tsis txwv nyob rau hauv kev xaiv ntawm cov kev txwv thiab tuaj yeem ua tiav nrog cov npe ua haujlwm. Hauv lwm lo lus, qhov kev daws teeb meem zoo tshaj plaws yog kom dhau lub npe B() rau A() thiab cia A() nws tus kheej hu B(). Nyob rau hauv rooj plaub no, yuav tsis muaj teeb meem nrog kev rov qab los tswj, thiab kev siv cov recursive algorithm yuav ua kom pom tseeb dua.
Kev nkag siab thiab theem ntawm kev rov ua dua
Qhov teeb meem nrog kev tsim cov algorithms recursive yog tias koj yuav tsum nkag siab qhov kev hloov pauv ntawm cov txheej txheem. Thaum siv recursion hauv cov txheej txheem khoom, tshwj xeeb tshaj yog nyob rau theem ntawm tus poj koob yawm txwv paub daws teeb meem, muaj teeb meem ntawm kev nkag siab koj tus kheej algorithm hauv cov ntsiab lus ntawm nws lub sijhawm ua tiav.
Tam sim no, tsis muaj kev txwv ntawm qib zes ntawm kev ua haujlwm thiab pawg muaj peev xwm hauv kev hu xov tooj, tab sis muaj teeb meem kev nkag siab: nyob rau lub sijhawm twg cov ntaub ntawv qib lossis qhov chaw twg hauv cov txheej txheem dav dav hu ua recursive muaj nuj nqi thiab ntawm tus xov tooj hu nws tus kheej nws yog.
Cov cuab yeej debugging uas twb muaj lawm feem ntau tsis muaj zogQhia rau tus programmer txoj kev daws teeb meem.
Nws suav hais tias kev ua haujlwm cyclic yog sib npaug rau kev rov ua dua. Tseeb, nyob rau hauv qee qhov xwm txheej, qhov recursive algorithm tuaj yeem siv tau rau hauv cov syntax ntawm conditional thiab cyclic constructs.
Txawm li cas los xij, yog tias muaj kev nkag siab meej tias ib qho haujlwm tshwj xeeb yuav tsum tau ua los ntawm kev siv cov txheej txheem rov ua dua, ib qho kev siv sab nraud ntawm lub voj lossis cov lus qhia yuav tsum raug tso tseg.
Lub ntsiab lus ntawm no yog qhov kev daws teeb meem rov ua haujlwm hauv daim ntawv ntawm kev siv nws tus kheej yuav ua tiav, ua tiav kev ua tiav algorithm. Qhov algorithm no yuav xav kom tus programmer los tsim nws nrog kev siv zog, nkag siab txog qhov muaj zog ntawm cov algorithm, tab sis nws yuav yog qhov kev daws teeb meem kawg uas tsis tas yuav muaj kev tswj hwm sab nraud.
Txhua qhov kev sib xyaw ua ke ntawm cov neeg ua haujlwm sab nraud thiab cov neeg ua haujlwm cyclic yuav tsis tso cai rau peb los sawv cev rau cov txheej txheem recursive raws li kev ua tiav.
Recursion Consensus and OOP
Nyob rau hauv yuav luag txhua qhov sib txawv ntawm kev tsim cov txheej txheem recursive, ib txoj kev npaj tsim los tsim ob lub algorithms. Thawj algorithm tsim cov npe ntawm cov khoom yav tom ntej (xws li), thiab qhov thib ob algorithm yog qhov ua haujlwm rov ua dua.
Qhov kev daws teeb meem zoo tshaj plaws yuav yog npaj rov ua dua ib qho cuab yeej (txoj kev) uas muaj cov txheej txheem rov ua dua tshiab, thiab muab tag nrho cov kev npaj ua haujlwm rau hauv tus tsim khoom.
A recursive algorithm tsuas yog txoj kev daws teeb meem thaum nws ua haujlwmtsuas yog los ntawm nws tus kheej, tsis muaj kev tswj hwm sab nraud thiab kev tswj hwm. Ib qho algorithm sab nraud tsuas tuaj yeem muab lub teeb liab ua haujlwm. Qhov tshwm sim ntawm txoj haujlwm no yuav tsum yog qhov kev xav tau daws, tsis muaj kev txhawb nqa sab nraud.
Recursion yuav tsum yog ib qho kev daws teeb meem nyob ib leeg.
nkag siab nkag siab thiab ua haujlwm tiav
Thaum cov phiaj xwm taw qhia cov phiaj xwm tau dhau los ua tus qauv de facto, nws tau pom tseeb tias txhawm rau txhawm rau ua tau zoo, koj yuav tsum hloov koj txoj kev xav. Tus programmer yuav tsum txav los ntawm cov syntax thiab semantics ntawm cov lus mus rau lub zog ntawm cov semantics thaum lub sij hawm ua tiav ntawm algorithm.
yam ntxwv ntawm kev rov ua dua: nws tuaj yeem siv tau rau txhua yam:
- web scraping;
- nrhiav haujlwm;
- parsing text information;
- nyeem lossis tsim cov ntaub ntawv MS Word;
- sampling lossis analyzing tags…
yam ntxwv ntawm OOP: nws ua rau nws muaj peev xwm piav qhia txog cov txheej txheem rov ua dua ntawm qib ntawm cov poj koob yawm txwv paub daws teeb meem, tab sis muab rau nws xa mus rau cov xeeb leej xeeb ntxwv, txhua tus muaj nws tus kheej palette ntawm cov ntaub ntawv thiab cov khoom.
Recursion yog qhov zoo tagnrho vim nws xav tau kev ua haujlwm tiav ntawm nws cov algorithm. OOP txhim kho qhov ua tau zoo ntawm cov txheej txheem rov ua dua los ntawm kev muab nws nkag mus rau txhua tus menyuam yaus tshwj xeeb.