სხვაობა რეკურსიასა და გამეორებას შორის

Სარჩევი:

სხვაობა რეკურსიასა და გამეორებას შორის
სხვაობა რეკურსიასა და გამეორებას შორის

ვიდეო: სხვაობა რეკურსიასა და გამეორებას შორის

ვიდეო: სხვაობა რეკურსიასა და გამეორებას შორის
ვიდეო: «ЮЖНАЯ ОСЕТИЯ». НАЧАЛО КОНФЛИКТА / ЧАСТЬ 3 [ENG/GEO SUB] @DAIV_official 2024, ივლისი
Anonim

ძირითადი განსხვავება – რეკურსია გამეორების წინააღმდეგ

რეკურსია და გამეორება შეიძლება გამოყენებულ იქნას პროგრამირების პრობლემების გადასაჭრელად. პრობლემის გადაჭრის მიდგომა რეკურსიის ან გამეორების გამოყენებით დამოკიდებულია პრობლემის გადაჭრის გზაზე. რეკურსიასა და გამეორებას შორის მთავარი განსხვავება ისაა, რომ რეკურსია არის მექანიზმი ფუნქციის გამოძახებისთვის იმავე ფუნქციის ფარგლებში, ხოლო გამეორება არის ინსტრუქციების ნაკრების განმეორებით შესრულება, სანამ მოცემული პირობა არ იქნება ჭეშმარიტი. რეკურსია და გამეორება ძირითადი ტექნიკაა ალგორითმების შემუშავებისა და პროგრამული აპლიკაციების შესაქმნელად.

რა არის რეკურსია?

როდესაც ფუნქცია თავის თავს იძახებს ფუნქციის ფარგლებში, მას უწოდებენ რეკურსიას. რეკურსიის ორი ტიპი არსებობს. ეს არის სასრული რეკურსია და უსასრულო რეკურსია. სასრულ რეკურსიას აქვს საბოლოო პირობა. უსასრულო რეკურსიას არ აქვს დასრულებული პირობა.

რეკურსიის ახსნა შესაძლებელია პროგრამის გამოყენებით ფაქტორების გამოსათვლელად.

n!=n(n-1)!, თუ n>0

n!=1, თუ n=0;

მიმართეთ ქვემოთ მოცემულ კოდს 3(3!=321) ფაქტორული გამოსათვლელად.

intmain () {

int მნიშვნელობა=ფაქტორული (3);

printf("ფაქტორული არის %d\n", მნიშვნელობა);

დაბრუნება 0;

}

ინფაქტორული (innn) {

if(n==0) {

დაბრუნება 1;

}

სხვა {

დაბრუნება n ფაქტორიალი(n-1);

}

}

ფაქტორული (3) გამოძახებისას ეს ფუნქცია გამოიძახებს ფაქტორულ (2). ფაქტორიალის (2) გამოძახებისას ეს ფუნქცია გამოიძახებს ფაქტორულ (1). შემდეგ ფაქტორიალი (1) დაარქმევს ფაქტორულ (0). ფაქტორიალი (0) დააბრუნებს 1-ს. ზემოხსენებულ პროგრამაში n==0 პირობა „if ბლოკში“არის საბაზისო პირობა.ანალოგიურად, ფაქტორული ფუნქცია იწოდება ისევ და ისევ.

რეკურსიული ფუნქციები დაკავშირებულია სტეკთან. C-ში მთავარ პროგრამას შეიძლება ჰქონდეს მრავალი ფუნქცია. ამრიგად, main () არის გამოძახების ფუნქცია, ხოლო ფუნქცია, რომელსაც მთავარი პროგრამა იძახებს, არის გამოძახებული ფუნქცია. ფუნქციის გამოძახებისას კონტროლი ენიჭება გამოძახებულ ფუნქციას. ფუნქციის შესრულების შემდეგ, კონტროლი უბრუნდება მთავარს. შემდეგ მთავარი პროგრამა გრძელდება. ასე რომ, ის ქმნის აქტივაციის ჩანაწერს ან სტეკის ჩარჩოს შესრულების გასაგრძელებლად.

განსხვავება რეკურსიასა და გამეორებას შორის
განსხვავება რეკურსიასა და გამეორებას შორის
განსხვავება რეკურსიასა და გამეორებას შორის
განსხვავება რეკურსიასა და გამეორებას შორის

სურათი 01: რეკურსია

ზემოხსენებულ პროგრამაში, ძირითადიდან ფაქტორული (3) გამოძახებისას ის ქმნის აქტივაციის ჩანაწერს ზარის დასტაში. შემდეგ, ფაქტორული (2) სტეკის ჩარჩო იქმნება სტეკის თავზე და ასე შემდეგ. აქტივაციის ჩანაწერი ინახავს ინფორმაციას ლოკალური ცვლადების შესახებ და ა.შ. ფუნქციის გამოძახებისას, იქმნება ლოკალური ცვლადების ახალი ნაკრები სტეკის ზედა ნაწილში. ამ სტეკის ჩარჩოებს შეუძლიათ შეანელონ სიჩქარე. ანალოგიურად, რეკურსიაში, ფუნქცია თავის თავს იძახებს. რეკურსიული ფუნქციის დროის სირთულის აღმოჩენა ხდება რამდენჯერ, ფუნქციას ეძახიან. ერთი ფუნქციის გამოძახებისთვის დროის სირთულე არის O(1). n რაოდენობის რეკურსიული ზარისთვის, დროის სირთულე არის O(n).

რა არის გამეორება?

Iteration არის ინსტრუქციების ბლოკი, რომელიც მეორდება ისევ და ისევ, სანამ მოცემული პირობა არ იქნება ჭეშმარიტი. გამეორება შეიძლება მიღწეული იქნას "for loop", "do-while loop" ან "while loop" გამოყენებით. „მარყუჟის“სინტაქსი ასეთია.

-ისთვის (ინიციალიზაცია; მდგომარეობა; შეცვლა) {

// განცხადებები;

}

ძირითადი განსხვავება რეკურსიასა და გამეორებას შორის
ძირითადი განსხვავება რეკურსიასა და გამეორებას შორის
ძირითადი განსხვავება რეკურსიასა და გამეორებას შორის
ძირითადი განსხვავება რეკურსიასა და გამეორებას შორის

სურათი 02: „მარყუჟის ნაკადის დიაგრამა“

ინიციალიზაციის ნაბიჯი პირველი შესრულდება. ეს ნაბიჯი არის მარყუჟის კონტროლის ცვლადების გამოცხადება და ინიციალიზაცია. თუ პირობა მართალია, ხვეული ბრეკეტების შიგნით განცხადებები შესრულდება. ეს განცხადებები შესრულდება მანამ, სანამ პირობა არ არის ჭეშმარიტი. თუ პირობა მცდარია, კონტროლი გადადის შემდეგ განცხადებაზე "for loop"-ის შემდეგ. მარყუჟის შიგნით განცხადებების შესრულების შემდეგ, კონტროლი გადადის განყოფილების შეცვლაზე. ეს არის მარყუჟის კონტროლის ცვლადის განახლება. შემდეგ კვლავ შემოწმდება მდგომარეობა.თუ პირობა ჭეშმარიტია, განცხადებები ხვეული ბრეკეტების შიგნით შესრულდება. ამ გზით "for loop" მეორდება.

„while loop“-ში, განცხადებები მარყუჟის შიგნით სრულდება მანამ, სანამ პირობა არ იქნება ჭეშმარიტი.

ხოლო (პირობა){

//განცხადებები

}

"do-while" ციკლში მდგომარეობა მოწმდება მარყუჟის ბოლოს. ასე რომ, ციკლი შესრულდება ერთხელ მაინც.

გააკეთე{

//განცხადებები

} ხოლო(პირობა)

პროგრამა 3 (3!) ფაქტორების მოსაძებნად გამეორების გამოყენებით („მარყუჟისთვის“) არის შემდეგი.

int main(){

intn=3, ფაქტორული=1;

inti;

for(i=1; i<=n; i++){

ფაქტორული=ფაქტორულიi;

}

printf("ფაქტორული არის %d\n", ფაქტორული);

დაბრუნება 0;

}

რა მსგავსებაა რეკურსიასა და გამეორებას შორის?

  • ორივე ტექნიკაა პრობლემის გადასაჭრელად.
  • ამოცანის ამოხსნა შესაძლებელია რეკურსიით ან განმეორებით.

რა განსხვავებაა რეკურსიასა და გამეორებას შორის?

რეკურსია გამეორების წინააღმდეგ

რეკურსია არის ფუნქციის გამოძახების მეთოდი იმავე ფუნქციის ფარგლებში. იტერაცია არის ინსტრუქციების ბლოკი, რომელიც მეორდება მანამ, სანამ მოცემული პირობა არ იქნება ჭეშმარიტი.
სივრცის სირთულე
რეკურსიული პროგრამების სივრცის სირთულე უფრო მაღალია, ვიდრე გამეორება. სივრცის სირთულე უფრო დაბალია გამეორებებში.
სიჩქარე
რეკურსიის შესრულება ნელია. ნორმალურად, გამეორება უფრო სწრაფია, ვიდრე რეკურსი.
მდგომარეობა
თუ არ არის შეწყვეტის პირობა, შეიძლება იყოს უსასრულო რეკურსია. თუ პირობა არასოდეს გახდება მცდარი, ეს იქნება უსასრულო გამეორება.
დასტა
რეკურსიაში, დასტა გამოიყენება ლოკალური ცვლადების შესანახად, როდესაც ფუნქცია გამოიძახება. გამეორებისას დასტა არ გამოიყენება.
კოდის წაკითხვა
რეკურსიული პროგრამა უფრო იკითხება. იტერატიული პროგრამა უფრო რთული წასაკითხია, ვიდრე რეკურსიული პროგრამა.

შეჯამება – რეკურსია გამეორების წინააღმდეგ

ეს სტატია განიხილავდა განსხვავებას რეკურსიასა და გამეორებას შორის.ორივე შეიძლება გამოყენებულ იქნას პროგრამირების პრობლემების გადასაჭრელად. რეკურსიასა და გამეორებას შორის განსხვავება ისაა, რომ რეკურსია არის მექანიზმი ფუნქციის გამოძახების მიზნით იმავე ფუნქციის ფარგლებში და მისი გამეორება ინსტრუქციების ნაკრების განმეორებით შესასრულებლად, სანამ მოცემული პირობა არ იქნება ჭეშმარიტი. თუ პრობლემის გადაჭრა შესაძლებელია რეკურსიული ფორმით, ის ასევე შეიძლება გადაწყდეს გამეორებების გამოყენებით.

ჩამოტვირთეთ რეკურსიის PDF ვერსია განმეორების წინააღმდეგ

შეგიძლიათ ჩამოტვირთოთ ამ სტატიის PDF ვერსია და გამოიყენოთ იგი ოფლაინ მიზნებისთვის ციტირების შენიშვნის მიხედვით. გთხოვთ გადმოწეროთ PDF ვერსია აქ განსხვავება რეკურსიასა და გამეორებას შორის

გირჩევთ: