Jump to content

Search the Community

Showing results for tags 'რეკურსიის ძალა'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • ფორუმი
    • ფორუმი
    • ზოგადი დისკუსიები
    • ტუტორიალი/Tutorial
    • მათემატიკა
    • ბიბლიოთეკა
    • კრიპტოგრაფია
    • კიბერ უსაფრთხოება
    • ელექტროინჟინერია
  • პროგრამები
    • დიზანის & 3D მოდელირება
    • პროგრამები/ software
    • დაცვა
  • Visual Studio
    • Visual Studio
    • C#
    • C და C++
    • ASP.NET/WPF/MVC
    • WCF
    • Quick Basic / Visual Basic
  • Web Development
    • HTML & CSS
    • Bootstrap
    • PHP & MySQL
    • Javascript
    • AngularJS
    • სხვადასხვა
    • SEO
    • ძრავების მიმოხილვა
  • Development
    • JAVA
    • Perl
    • Python
    • ბაზები
    • Other
    • Game Developer
    • მობილურის დეველოპერი
  • IT-Support
    • Unix/Linux
    • MS Windows
    • Apple /MAC
    • Android
    • Network
    • კომპიუტერის არქიტექტურა
  • ყიდვა-გაყიდვა/შეკვეთები
    • ყიდვა-გაყიდვა
    • შეკვეთები

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


ლოკაცია


ინტერესები

Found 1 result

  1. მოგესალმებით. დიდი ხნის პაუზის შემდეგ დავბრუნდი და მინდა შემოგთავაზოთ ერთი საინტერესო პოსტი რეკურსიის შესახებ. მოდით ჯერ ზოგადად რეკურსიის(რეკურსიული ფუნქციის) შესახებ ვთქვათ ორიოდე სიტყვა: რეკურსიული ფუნქცია ეწოდება ისეთ ფუნქციას რომელიც იძახებს საკუთარ თავს, მისი მთავარი იარაღია ამოცანის მარტივ ნაწილებად დაშლა ანუ დეკომპოზიცია. რეკურსია მოქმედებს პრინციპით “დაყავი და იბატონე”. რეკურსიული ფუნქციის დასრულება ხდება ამოცანის საბაზო ანუ ყველაზე მარტივ დონემდე დაყვანით. ამოცანის რეკურსიულად გადაწყვეტა მოითხოვს გაცილებით დიდ რესურსებს კომპიუტერისგან, ვიდრე ამას საჭიროებს ტრადიციული(იტერაციული) მიდგომა, თუმცა უნდა აღინიშნოს რომ ზოგიერთი ამოცანის გადაწყვეტისას რეკურსიული მიდგომა გაცილებით უკეთესია , ვიდრე იტერაციული. ასეთი ამოცანების რიგს მიეკუთვნება ამოცანა ჰანოის კოშკების შესახებ, რომლის იტერაციული გადაწყვეტა ძალიან დიდ სირთულეს წარმოადგენს, როდესაც რეკურსიით ყველაფერი მარტივად და გასაგებად წყდება. ახლა განვიხილოთ ამოცანის პირობა: არსებობს ლეგენდა, რომ შორეული აღმოსავლეთის ერთ-ერთ მონასტერში ბერები ცდილობდნენ გადაეტანათ ფირფიტები ერთი ღერძიდან მეორეზე, ფირფიტები ღერძზე ჩამოცმული იყო ისე, რომ მათი ზომა მცირდებოდა ქვემოდან ზემოთ. ფირფიტები გადატანა ხდებოდა შემდეგი წესებით: ერთ გადატანაზე შეიძლება გადაიტანო მხოლოდ ერთი ფირფიტადიდი ზომის ფირფიტა არასდროს არ უნდა აღმოჩნდეს პატარა ფირფიტის ზემოდანშეგვიძლია გამოვიყენოთ მხოლოდ ერთი დამხმარე ღერძი ბერები ცდილობდნენ ეს პროცესი შეესრულებინათ 64 ფირფიტისთვის ლეგენდა ასევე ამბობს, რომ როდესაც ისინი ამ პროცესს დაასრულებენ ( ამ ყველაფერს ისინი კომპიუტერის გარეშე აკეთებენ ) ქვეყნიერების დასასრული დადგება ასე რომ მაინც და მაიც ნუ დავეხმარებით მათ:) შევუდგეთ ამოცანის ამოხსნას: მოდით განვიხილოთ პირობა, როდესაც 1 – ი ღერძიდან 3 – მე ღერძზე გადასატანია 3 ფირფიტა, 2 – ე ღერძს ვიყენებთ ფირფიტების დროებით განსათავსებლად. ამოცანას თუ დავუკვირდებით შევამჩნევთ, რომ 3 ფირფიტის გადატანა შეიძლება გამარტივდეს 2 ფირფიტის გადატანის საშუალებით ანუ n ფირფიტის გამარტივება ხდება n-1 ფირფიტის გადანაცვლებით. შემოვიტანოთ ცვლადები: disc – ფირფიტების რაოდენობა first – ღერძი, რომელზეც განთავსებულია ფირფიტები last – ღერძი, რომელზეც გადაგვაქვს ფირფიტები temp – დამხმარე რერძი, ფირფიტების დროებიტ განსათავსებლად ამოცანის გადაწყვეტის ალგორითმი თითოეული რეკურსიული ბიჯისთვის ასეთია: 1. გადავიტანოთ disc – 1 ფირფიტა first – დან temp– ზე 2. გადავიტანოთ 1 დარჩენილი ფირფიტა first – დან last – ზე 3. გადავითანოთ disc – 1 ფირფიტა temp – დან last – ზე ეს პროცესი დასრულდება, მაშინ როდესაც გადასატანი იქნება მხოლოდ 1 ფირფიტა, ანუ ფუნქცია მიაღწევს საბაზო ამოცანამდე. ეს ალგორითმი შეიძლება გამოვიყენოთ 64 ფირფიტის ამოცანის გადაწყვეტისთვისაც. ახლა კი ამ ალგორითმის რეალიზაცია C++ ზე. void HanoiTower(int disc, int first, int last, int temp)//ფუნქცია იღებს ზემოთ ჩამოთვლილ პარამეტრებს { if( disc == 1 ) //მოწმდება პირობა: არის თუ არა ფირფიტების რაოდენობა საბაზო ანუ 1 { cout<<first<<” –> “<<last<<endl;//იბეჭდება, საიდან სად უნდა გადავიტანოთ ფირფიტა. მაგალითად: 1 –> 3 } else//როდესაც ფირფიტების რაოდენობა ერთზე მეტია { //ფუნქცია იძახებს თავისთავს ალგორითმის წესების შესამამისად HanoiTower(disc – 1, first, temp, last); HanoiTower(1,first,last,temp); HanoiTower(disc – 1, temp, last, first); } return; } თუ ფუნქციას გამოვიძახებთ პარამეტრებით HanoiTower(3,1,3,2) გვექნება შემდეგი შედეგი: 1–>3 1–>2 3–>2 1–>3 2–>1 2–>3 1–>3 ავტორი:გიორგი ლობჟანიძე
×