Տարբերություն ռեկուրսիայի և կրկնության միջև

Բովանդակություն:

Տարբերություն ռեկուրսիայի և կրկնության միջև
Տարբերություն ռեկուրսիայի և կրկնության միջև

Video: Տարբերություն ռեկուրսիայի և կրկնության միջև

Video: Տարբերություն ռեկուրսիայի և կրկնության միջև
Video: C# (Algorithmic) – 10."C/C# պարզ տարբերություններ" 2024, Հուլիսի
Anonim

Հիմնական տարբերություն – Ռեկուրսիա ընդդեմ կրկնության

Recursion-ը և Iteration-ը կարող են օգտագործվել ծրագրավորման խնդիրները լուծելու համար: Խնդրի լուծման մոտեցումը՝ օգտագործելով ռեկուրսիա կամ կրկնություն, կախված է խնդրի լուծման եղանակից: Ռեկուրսիայի և կրկնության միջև հիմնական տարբերությունն այն է, որ ռեկուրսիան մի գործառույթ է կանչելու միևնույն ֆունկցիայի մեջ, մինչդեռ կրկնությունը մի շարք հրահանգների բազմիցս կատարելն է, մինչև տվյալ պայմանը ճշմարիտ լինի: Ռեկուրսիան և կրկնությունը ալգորիթմներ մշակելու և ծրագրային հավելվածներ ստեղծելու հիմնական տեխնիկան են:

Ի՞նչ է ռեկուրսիան:

Երբ ֆունկցիան իրեն կանչում է ֆունկցիայի ներսում, այն հայտնի է որպես Ռեկուրսիա: Կան երկու տեսակի ռեկուրսիա. Դրանք վերջավոր ռեկուրսիա են և անսահման ռեկուրսիա։ Վերջնական ռեկուրսիան ունի վերջացող պայման։ Անսահման ռեկուրսիան չունի ավարտվող պայման։

Ռեկուրսիան կարելի է բացատրել ծրագրի միջոցով՝ գործակիցները հաշվարկելու համար:

n!=n(n-1)!, եթե n>0

n!=1, եթե n=0;

Դիտեք ստորև բերված կոդը՝ 3-ի գործակիցը հաշվարկելու համար (3!=321):

intmain () {

int արժեք=գործոնային (3);

printf(«Factory is %d\n», արժեքը);

վերադարձ 0;

}

infactorial (intn) {

if(n==0) {

վերադարձ 1;

}

այլ {

վերադարձ n գործոնային(n-1);

}

}

Երբ կանչում ենք գործոնային (3), այդ ֆունկցիան կանվանի գործոնային (2): Factorial (2) կանչելիս այդ ֆունկցիան կանվանի factorial (1): Այնուհետև ֆակտորիանը (1) կկանչի գործոնային (0): factorial (0)-ը կվերադարձնի 1: Վերոնշյալ ծրագրում n==0 պայմանը “if block”-ում հիմնական պայմանն է:Համաձայն Likewise-ի, գործոնային ֆունկցիան կանչվում է նորից ու նորից։

Ռեկուրսիվ ֆունկցիաները կապված են կույտի հետ: C-ում հիմնական ծրագիրը կարող է ունենալ բազմաթիվ գործառույթներ։ Այսպիսով, main ()-ը կանչող ֆունկցիան է, իսկ այն ֆունկցիան, որը կանչվում է հիմնական ծրագրի կողմից, կանչված ֆունկցիան է: Երբ ֆունկցիան կանչվում է, կառավարումը տրվում է կանչված ֆունկցիային։ Ֆունկցիայի կատարման ավարտից հետո կառավարումը վերադարձվում է հիմնական: Այնուհետեւ հիմնական ծրագիրը շարունակվում է. Այսպիսով, այն ստեղծում է ակտիվացման ձայնագրություն կամ կույտ շրջանակ՝ կատարումը շարունակելու համար:

Տարբերությունը ռեկուրսիայի և կրկնության միջև
Տարբերությունը ռեկուրսիայի և կրկնության միջև
Տարբերությունը ռեկուրսիայի և կրկնության միջև
Տարբերությունը ռեկուրսիայի և կրկնության միջև

Նկար 01. Ռեկուրսիա

Վերոնշյալ ծրագրում հիմնականից ֆակտորըլը (3) կանչելիս այն ստեղծում է ակտիվացման գրառում զանգերի կույտում։ Այնուհետև, ֆակտորային (2) կույտի շրջանակը ստեղծվում է կույտի վերևում և այլն: Ակտիվացման գրառումը պահպանում է տեղեկատվություն տեղային փոփոխականների և այլնի մասին: Ամեն անգամ, երբ ֆունկցիան կանչվում է, լոկալ փոփոխականների նոր հավաքածու է ստեղծվում փաթեթի վերևում: Այս կույտային շրջանակները կարող են դանդաղեցնել արագությունը: Նմանապես ռեկուրսիայում ֆունկցիան իրեն կանչում է: Ժամանակի բարդությունը ռեկուրսիվ ֆունկցիայի համար հայտնաբերվում է անգամների քանակով, ֆունկցիան կոչվում է։ Մեկ ֆունկցիայի կանչի ժամանակի բարդությունը O(1 է): n թվով ռեկուրսիվ զանգերի դեպքում ժամանակի բարդությունը O(n) է։

Ի՞նչ է կրկնությունը:

Iteration-ը հրահանգների բլոկ է, որը կրկնվում է նորից ու նորից, մինչև տվյալ պայմանը ճիշտ լինի: Կրկնումը կարող է իրականացվել օգտագործելով «for loop», «do-while loop» կամ «while loop»: «for loop» շարահյուսությունը հետևյալն է.

համար (նախնականացում; պայման; փոփոխել) {

// հայտարարություններ;

}

Հիմնական տարբերությունը ռեկուրսիայի և կրկնության միջև
Հիմնական տարբերությունը ռեկուրսիայի և կրկնության միջև
Հիմնական տարբերությունը ռեկուրսիայի և կրկնության միջև
Հիմնական տարբերությունը ռեկուրսիայի և կրկնության միջև

Նկար 02. «հանգույցի հոսքի դիագրամ»

Նախնականացման քայլը կատարվում է առաջինը: Այս քայլը հանգույցի կառավարման փոփոխականների հայտարարումն ու սկզբնավորումն է: Եթե պայմանը ճշմարիտ է, ապա գանգուր փակագծերի ներսում հայտարարությունները կատարվում են: Այդ հայտարարությունները գործում են այնքան ժամանակ, քանի դեռ պայմանը ճշմարիտ է: Եթե պայմանը կեղծ է, ապա կառավարումը անցնում է հաջորդ հայտարարությանը «for loop»-ից հետո: Հանգույցի ներսում հայտարարությունները կատարելուց հետո հսկիչը գնում է փոփոխելու բաժինը: Դա հանգույցի կառավարման փոփոխականը թարմացնելու համար է: Հետո վիճակը նորից ստուգվում է։Եթե պայմանը ճշմարիտ է, գանգուր փակագծերի ներսում հայտարարությունները կկատարվեն: Այս կերպ «for loop» կրկնվում է:

«while ցիկլում» հանգույցի ներսում հայտարարությունները կատարվում են այնքան ժամանակ, մինչև պայմանը ճշմարիտ լինի:

մինչդեռ (պայման){

//հայտարարություններ

}

«do-while» օղակում պայմանը ստուգվում է օղակի վերջում: Այսպիսով, հանգույցը կատարվում է առնվազն մեկ անգամ:

անել{

//հայտարարություններ

} մինչդեռ(պայման)

3 (3!) ֆակտորիալը գտնելու ծրագիրը՝ օգտագործելով կրկնությունը («for loop») հետևյալն է։

int main(){

intn=3, գործոնային=1;

inti;

համար(i=1; i<=n; i++){

գործոնային=գործոնայինi;

}

printf(«Factory is %d\n», factorial);

վերադարձ 0;

}

Որո՞նք են նմանությունները ռեկուրսիայի և կրկնության միջև:

  • Երկուսն էլ խնդիր լուծելու տեխնիկա են։
  • Խնդիրը կարող է լուծվել կա՛մ ռեկուրսիայով, կա՛մ կրկնությամբ:

Ո՞րն է տարբերությունը ռեկուրսիայի և կրկնության միջև:

Ռեկուրսիա ընդդեմ կրկնություն

Ռեկուրսը նույն ֆունկցիայի ներսում ֆունկցիա կանչելու մեթոդ է: Իտերացիան հրահանգների բլոկ է, որը կրկնվում է այնքան ժամանակ, մինչև տրված պայմանը ճիշտ լինի:
Տիեզերական բարդություն
Ռեկուրսիվ ծրագրերի տիեզերական բարդությունն ավելի բարձր է, քան կրկնությունները: Տիեզերական բարդությունը կրկնությունների մեջ ավելի ցածր է:
Արագություն
Ռեկուրսիայի կատարումը դանդաղ է: Սովորաբար կրկնությունն ավելի արագ է, քան ռեկուրսիան:
Պայման
Եթե չկա դադարեցման պայման, կարող է լինել անսահման ռեկուրսիա: Եթե պայմանը երբեք չի դառնա կեղծ, դա կլինի անսահման կրկնություն:
Ստաք
Ռեկուրսիայում, կույտը օգտագործվում է տեղական փոփոխականները պահելու համար, երբ ֆունկցիան կանչվում է: Կրկնության ժամանակ կույտը չի օգտագործվում:
Կոդերի ընթեռնելիություն
Ռեկուրսիվ ծրագիրն ավելի ընթեռնելի է։ Կրկնվող ծրագիրն ավելի դժվար է կարդալ, քան ռեկուրսիվ ծրագիրը:

Ամփոփում – Ռեկուրսիա ընդդեմ կրկնություն

Այս հոդվածը քննարկեց ռեկուրսիայի և կրկնության միջև եղած տարբերությունը:Երկուսն էլ կարող են օգտագործվել ծրագրավորման խնդիրներ լուծելու համար։ Ռեկուրսիայի և կրկնության միջև տարբերությունն այն է, որ ռեկուրսիան մեխանիզմ է, որը կարող է ֆունկցիա կանչել միևնույն ֆունկցիայի ներսում և կրկնել այն՝ մի քանի անգամ կատարել հրահանգների հավաքածու, մինչև տվյալ պայմանը ճշմարիտ լինի: Եթե խնդիրը կարող է լուծվել ռեկուրսիվ ձևով, այն կարող է լուծվել նաև կրկնությունների միջոցով:

Ներբեռնեք Recursion vs Recursion-ի PDF տարբերակը

Դուք կարող եք ներբեռնել այս հոդվածի PDF տարբերակը և օգտագործել այն անցանց նպատակներով՝ ըստ մեջբերումների: Խնդրում ենք ներբեռնել PDF տարբերակը այստեղ Տարբերությունը ռեկուրսիայի և կրկնության միջև

Խորհուրդ ենք տալիս: