Thursday, 9 March 2017

რეკურსია



დავიწყოთ იქიდან რო რეკურსია ჯავაში არც ისე ხშირად გამოყენებადი პრაკტიკა გახლავთ, ბევრ გვერდზე შეხვდებით სტატიებს სადაც უამრავი პროგრამისტი წერს რომ რეკურსია ერთ-ერთი უმთავრესი ოპერაცია გახლავთ ჯავაში, ის ჭრის უამრავ პრობლემას და პრობლემები რომლის გადაჭრაც რეკურსიით არ მოხდა უმჯობესი იქნებოდა რო მისი მეშვეობით მომხდარიყო... მსგავს არგუმენტს კი იმით ამართელებენ რო რეკურსიული მეთოდი ადვილად წასაკითხია, კოდი უფრო ელეგანტურად გამოიყურება და რაც მთავარია დებაგირების დროს გვიწყობს ხელს, ნუ სიმართლის მარცვალი დევს ამაში მაგრამ არ არის ეს მარცვალი იმ სიდიდის რო ხე გაზარდოს. 
რა არის რეკურსია და სად გამოიყენება იგი: რეკურსიულად ძირითადად გვევლინება მეთოდი, როდესაც მეთოდი იძახებს საკუთარ თავს ოპერაციის დროს გახლავთ რეკურსიული მეთოდი, მაგალითისთვის წარმოიდგინეთ მეთოდი რომელიც ასრულებს შეკრებას და საკუთარ ტანშივე გამოიძახებს საკუთარ თავს, შეკრიბავს ციფრებს და დააბრუნებს შედეგს, არც ისე რთულად ჟღერს ხო? რა თქმა უნდა არა, მაგრამ რეალობა რაც მსგავსი ოპერაციების უკან დგას არის ის, რომ ის მრავალ საფეხურიან და კომპლეკსურ ოპერაციას ასრულებს.
რამდენი სახის რეკურსია არსებობს?   არსებობს 2 სახის რეკურსია: 1. პირდაპირი(როდესაც მეთოდი იძახებს საკუთარ თავს) 2. ირიბი(როდესაც “X ” მეთოდს იძახებს “Y” მეთოდი,  “Y” მეთოდს იძახებს  “C” მეთოდი და  “C” მეთოდს იძახებს ისევ  “X” მეთოდი. )
ნახეთ მარტივი მაგალითი:

განვიხილოთ რა მოხდა ფოტოზე:
შავ ზოლზე ცვლადი იმოძრავებს უკუ მიმართულებით, წითელ ზოლზე გვაქ ოპერაცია რომლის დადგომის შემთხვევაში მეთოდმა უნდა შეწყვიტოს მუშაობა, მწვანე ზოლზე მეთოდი იძახებს საკუთარ თავს. დაუშვათ რომ არ გვქონდეს წითელი ზოლი კოდში, მეთოდი გამოიძახებს საკუთარ თავს გაუთავებლად, მანამ სანამ არ მივა stackoverflow გამონაკლისამდე.  რა დასკვნის გაკეთების საშუალებას გვაძლევს ეგ ოპერაცია? 
1. რეკურსიულ მეთოდში აუცილებლად უნდა გვექნეს დეფინირებული ოპერაციის დასრულების ადგილი. (წითელი ზოლი ფოტოზე)
2.     ოპერაციამ უნდა იმოძრაოს დასასრულისკენ. (შავი ზოლი ფოტოზე)


ეს ორი მარტივი წესი აქვს რეკურსიას, მანამ სანამ მიყვებით ამ 2 წეს ყველაფერი იმუშავებს, თუ დაგავიწყდებათ თქვენი კოდი გადაეშვება უსასრულობაში და გაჩერდება იქ სადაც სტაკ მეხსიერება შეივსება( stackoverflow გამონაკლისი)

რეკურსია ძალიან გავს for-while loop-ს. პრაკტიკული მაგალითები ნახეთ შემდეგ ბმულზე (<----- დააჭირეთ "ბმულზე"-ს)

No comments:

Post a Comment