ძირითადი მასალა
კურსი: კომპიუტერული მეცნიერება > თემა 1
გაკვეთილი 6: რეკურსიული ალგორითმები- რეკურსია
- ფაქტორიალის ფუნქცია
- გამოწვევა: განმეორებითი ფაქტორიალი
- რეკურსიული ფაქტორიალი
- გამოწვევა: რეკურსიული ფაქტორიალი
- რეკურსიული ალგორითმების თვისებები
- რეკურსიის დახმარებით განვსაზღვროთ სიტყვა პალინდრომია თუ არა
- გამოწვევა: არის თუ არა სტრიქონი პალინდრომი?
- რიცხვის ხარისხების გამოთვლა
- გამოწვევა: რეკურსიული ხარისხები
- მრავალჯერადი რეკურსია სერპინსკის სამკუთხედით
- რეკურსიული ფუნქციების ეფექტურობის გაუმჯობესება
- პროექტი: რეკურსიული ხელოვნება
© 2024 Khan Academyგამოყენების პირობებიკონფიდენციალურობის პოლიტიკაშენიშვნა ქუქი-ჩანაწერებზე
რეკურსიული ალგორითმების თვისებები
აი, რეკურსიული ალგორითმების მთავარი იდეა:
ამოცანის ამოსახსნელად, ამოხსენით ქვეამოცანა, რომელიც იმავე ამოცანის უფრო მცირე ზომის ვარიანტია, და შემდეგ ამ მცირე ვარიანტის ამონახსნი გამოიყენე თავდაპირველი ამოცანის ამოსახსნელად.
იმისთვის, რომ რეკურსიულმა ალგორითმმა იმუშაოს, უფრო მცირე შემთხვევები საბოლოოდ უნდა დავიდნენ ბაზისამდე. როდესაც ვითვლით -ს, ქვეამოცანები უფრო და უფრო მცირდება მანამ, სანამ არ გამოვთვლით -ს. აუცილებლად უნდა დახვიდეთ საბოლოოდ ბაზისამდე.
მაგალითად, რა მოხდებოდა იმ შემთხვევაში, თუ უარყოფითი რიცხვის ფაქტორიალის გამოთვლას შევეცდებოდით ჩვენი რეკურსიული მეთოდის გამოყენებით? -ის გამოსათვლელად ჯერ შეეცდებოდით -ის გამოთვლას, რათა გაგემრავლებინათ შედეგი -ზე. მაგრამ -ის გამოსათვლელად, ჯერ შეეცდებოდით -ის გამოთვლას, რათა შემდეგ შედეგი გაგემრავლებინათ -ზე. და შემდეგ შეეცდებოდით გამოგეთვალათ და ა.შ. რა თქმა უნდა, რიცხვები უფრო და უფრო მცირდება, მაგრამ ისინი აგრეთვე უფრო და უფრო შორდებიან ბაზის -ს. ვერასდროს მიიღებდით პასუხს.
Even if you can guarantee that the value of is not negative, you can still get into trouble if you don't make the subproblems progressively smaller. Here's an example. Let's take the formula and divide both sides by , giving . Let's make a new variable, , and set it equal to . Since our formula applies to any positive number, let's substitute for , giving . რადგანაც , we now have . Switching sides and noting that gives us . This formula leads us to believe that you can compute by first computing and then dividing the result by . But to compute , you would have to compute , then , and so on. You would never get to the base case of 0. რატომ არა? Because each recursive subproblem asks you to compute the value of a larger number, not a smaller number. If is positive, you would never hit the base case of 0.
რეკურსიის იდეის ზოგადი სურათის წარმოდგენა შეგვიძლია ორი მარტივი წესით:
- რეკურსიის ყოველი გამოძახება უნდა იყოს იმავე ამოცანის შემცირებული ვერსია, ანუ, უფრო მცირე ზომის ქვეამოცანა.
- რეკურსიული გამოძახებები საბოლოოდ უნდა დავიდნენ ბაზისამდე, რომელიც იხსნება კერძოდ.
დავუბრუნდეთ მატრიოშკებს (რუსულ თოჯინებს). მიუხედავად იმისა, რომ ისინი არცერთ ალგორითმს არ ასრულებენ, ხედავთ, რომ ყოველი თოჯინა ყველა უფრო პატარა თოჯინას მოიცავს (რეკურსიული შემთხვევის ანალოგიური) მანამ, სანამ ყველაზე პატარა თოჯინა არ მოიცავს არცერთ სხვა თოჯინას (როგორც ბაზისი).
ამ მასალის შინაარსი შექმნილია დარტმუთის კომპიუტერული მეცნიერების პროფესორების, თომას კორმენისა და დევინ ბალკომის, ასევე ხანის აკადემიის კომპიუტრეული ჯგუფის მიერ. მასალის ლიცენზიაა CC-BY-NC-SA.
გსურთ, შეუერთდეთ დისკუსიას?
პოსტები ჯერ არ არის.