1 00:00:00,000 --> 00:00:05,587 2 00:00:05,587 --> 00:00:07,670 DOUG LLOYD: თუ ვნახე ვიდეო უკან, 3 00:00:07,670 --> 00:00:10,170 მთელი პროცესი შეიძლება ჰქონდეს როგორც ჩანს, ცოტა ჯადოსნური. 4 00:00:10,170 --> 00:00:10,930 როგორ მუშაობს იგი? 5 00:00:10,930 --> 00:00:15,010 როგორ ფუნქციების ვიცით, რომ ისინი უნდა დაველოდოთ და დაველოდოთ, სხვა მნიშვნელობა 6 00:00:15,010 --> 00:00:19,150 დაბრუნებულიყო სხვადასხვა ფუნქცია მოვუწოდებთ, რათა მიიღოთ შედეგი გვინდა? 7 00:00:19,150 --> 00:00:22,550 >> ისე, მიზეზი ამ მუშაობს იმიტომ რაღაც ცნობილია როგორც სტეკი. 8 00:00:22,550 --> 00:00:26,360 როცა რეკავთ ფუნქცია, სისტემა ადგენს განზე ფართი მეხსიერება 9 00:00:26,360 --> 00:00:28,120 რომ ფუნქცია გააკეთებს თავის საქმეს. 10 00:00:28,120 --> 00:00:31,720 ჩვენ მოვუწოდებთ ამ მოცულობით მეხსიერება, მიმდინარეობს გათვალისწინებულია თითოეული ფუნქცია 11 00:00:31,720 --> 00:00:35,670 მოვუწოდებთ დასტის ჩარჩო ან ფუნქცია ფარგლებში. 12 00:00:35,670 --> 00:00:38,290 და როგორც თქვენ შეიძლება ველოდოთ, ამ დასტის ფარგლებში 13 00:00:38,290 --> 00:00:41,000 ცხოვრობს დასტის ნაწილი მეხსიერება. 14 00:00:41,000 --> 00:00:43,960 15 00:00:43,960 --> 00:00:47,540 >> მეტი ფუნქცია დასტის ჩარჩო შეიძლება არსებობდეს მეხსიერება მოცემულ დროს. 16 00:00:47,540 --> 00:00:51,240 თუ მთავარ მოუწოდებს ფუნქცია ნაბიჯი, და ნაბიჯი მოუწოდებს მიმართულებით, 17 00:00:51,240 --> 00:00:54,460 ყველა სამი ფუნქცია აქვს ღია ფარგლებში. 18 00:00:54,460 --> 00:00:57,350 მაგრამ ისინი არ ყველა აქტიურ ფარგლებში. 19 00:00:57,350 --> 00:00:59,410 ეს ფარგლებში მოწყობილი დასტის. 20 00:00:59,410 --> 00:01:01,820 და ჩარჩოს საწყისი ყველაზე ცოტა ხნის წინ მოუწოდა 21 00:01:01,820 --> 00:01:04,390 ფუნქცია ყოველთვის თავზე Stack. 22 00:01:04,390 --> 00:01:07,150 და რომ ყოველთვის აქტიური ჩარჩო. 23 00:01:07,150 --> 00:01:10,420 არსებობს მხოლოდ ნამდვილად ოდესმე ერთი ფუნქცია, რომელიც არის აქტიური დროს. 24 00:01:10,420 --> 00:01:12,420 ეს არის ერთ-ერთი ყველაზე Stack. 25 00:01:12,420 --> 00:01:17,620 >> როდესაც ფუნქცია მოუწოდებს სხვა ფუნქცია, ეს ერთგვარი აჭერს პაუზის. 26 00:01:17,620 --> 00:01:20,590 ეს ერთგვარი შეჩერებულია, ელოდება. 27 00:01:20,590 --> 00:01:24,050 და კიდევ ერთი დასტის ჩარჩო მივიღებთ გადატანა დასტის თავზე მას. 28 00:01:24,050 --> 00:01:26,150 და რომ ხდება აქტიური ჩარჩო. 29 00:01:26,150 --> 00:01:28,600 და ჩარჩო დაუყოვნებლივ ქვემოთ სჭირდება ლოდინი 30 00:01:28,600 --> 00:01:33,560 მანამ, სანამ იგი კვლავ აქტიურ კარკასი ადრე მას შეუძლია განაახლოს თავისი მუშაობა. 31 00:01:33,560 --> 00:01:35,870 როდესაც ფუნქცია სრული და ეს კეთდება, 32 00:01:35,870 --> 00:01:37,720 მისი ჩარჩო popped off Stack. 33 00:01:37,720 --> 00:01:38,950 სწორედ ტერმინოლოგია. 34 00:01:38,950 --> 00:01:41,110 და ჩარჩო დაუყოვნებლივ ქვემოთ, როგორც უბრალოდ განაცხადა, 35 00:01:41,110 --> 00:01:42,880 ხდება ახალი აქტიური ჩარჩო. 36 00:01:42,880 --> 00:01:45,960 >> და თუ ეს მოუწოდებს სხვა ფუნქცია, ის აპირებს პაუზის ერთხელ. 37 00:01:45,960 --> 00:01:49,290 ეს ახალი ფუნქცია დასტის ჩარჩო იქნება უნდა აიძულა გადატანა ზევით Stack. 38 00:01:49,290 --> 00:01:50,650 იგი ყველაფერს გააკეთებს თავის საქმეს. 39 00:01:50,650 --> 00:01:52,100 ეს შეიძლება პოპ უკან off. 40 00:01:52,100 --> 00:01:55,630 და სხვა ფუნქცია ქვემოთ შეიძლება განაახლონ ერთხელ. 41 00:01:55,630 --> 00:02:00,080 >> მოდით გავლა ამ ერთხელ, ეძებს იდეა, რომ factorial ფუნქცია 42 00:02:00,080 --> 00:02:03,070 რომ ჩვენ განსაზღვრული უკან ვიდეო დაინახოს 43 00:02:03,070 --> 00:02:07,770 რამდენად ჯადოსნური უკან ეს რეკურსიული პროცესი მიმდინარეობს. 44 00:02:07,770 --> 00:02:09,870 ასე რომ, ეს არის ჩვენი მთელი ფაილი, უფლება? 45 00:02:09,870 --> 00:02:14,000 ჩვენ განისაზღვრება ორი ფუნქციები ძირითადი და, ფაქტობრივად. 46 00:02:14,000 --> 00:02:15,980 და როგორც ჩვენ შეიძლება ველოდოთ, ნებისმიერი C პროგრამის აპირებს 47 00:02:15,980 --> 00:02:18,470 უნდა დაიწყოს პირველი ხაზი მთავარი. 48 00:02:18,470 --> 00:02:21,660 >> ასე რომ, ჩვენ შევქმნით ახალ დასტის ჩარჩო მთავარი. 49 00:02:21,660 --> 00:02:23,320 და ის აპირებს დაიწყოს გაშვებული. 50 00:02:23,320 --> 00:02:25,270 მთავარი მოუწოდებს printf. 51 00:02:25,270 --> 00:02:29,390 და printf აპირებს ბეჭდვა ფაქტორიალი 5. 52 00:02:29,390 --> 00:02:31,440 ისე, ეს არ ვიცი რა ფაქტორიალი 5 არის, 53 00:02:31,440 --> 00:02:35,620 და ეს ზარი უკვე დამოკიდებულია სხვა ფუნქცია ზარი. 54 00:02:35,620 --> 00:02:37,270 ასე რომ, მთავარი აპირებს პაუზის უფლება არსებობს. 55 00:02:37,270 --> 00:02:39,103 მე კარგად დატოვოს თავისი arrow უფლება არსებობს, ფერი 56 00:02:39,103 --> 00:02:41,360 ის იმავე ფერის, როგორც დასტის ჩარჩო მარჯვენა 57 00:02:41,360 --> 00:02:47,720 მიუთითებს იმაზე, რომ მთავარი აპირებს გაყინვას აქ, ხოლო ის ფაქტორიალი 5 ეწოდება. 58 00:02:47,720 --> 00:02:49,300 >> ასე რომ, ის ფაქტორიალი 5 ეწოდება. 59 00:02:49,300 --> 00:02:53,160 და ის აპირებს დაიწყოს ძალიან დასაწყისში factorial ფუნქცია. 60 00:02:53,160 --> 00:02:55,440 იგი სთხოვს კითხვაზე მე გაუტოლდება 1? 61 00:02:55,440 --> 00:02:56,810 5 = 1? 62 00:02:56,810 --> 00:02:57,410 ისე, არ. 63 00:02:57,410 --> 00:03:01,110 ასე რომ, ის აპირებს დაცემას სხვაგან ნაწილი, დაბრუნების N ჯერ 64 00:03:01,110 --> 00:03:02,990 factorial of n მინუს 1. 65 00:03:02,990 --> 00:03:03,490 ისე, OK. 66 00:03:03,490 --> 00:03:07,070 >> ახლა, ის ფაქტორიალი 5 არის დამოკიდებულია სხვა ზარი 67 00:03:07,070 --> 00:03:09,740 რომ factorial, ჩაბარების 4 როგორც პარამეტრი. 68 00:03:09,740 --> 00:03:14,210 ასე რომ, ის ფაქტორიალი of 5 ჩარჩო, რომ წითელი ჩარჩოში, 69 00:03:14,210 --> 00:03:17,160 აპირებს გაყინვას უფლება არსებობს რომ ხაზი მე მითითებული 70 00:03:17,160 --> 00:03:21,914 და დაველოდოთ ფაქტორიალი 4 დასრულება ის, რაც უნდა გააკეთოს იმისათვის, რომ მაშინ ეს 71 00:03:21,914 --> 00:03:23,330 შეიძლება გახდეს აქტიური ჩარჩო ერთხელ. 72 00:03:23,330 --> 00:03:26,890 >> ასე რომ, Factorial 4 იწყება დასაწყისში ის ფაქტორიალი. 73 00:03:26,890 --> 00:03:28,556 4 უდრის 1? 74 00:03:28,556 --> 00:03:30,180 არა, ასე რომ, ის აპირებს გააკეთოს იგივე. 75 00:03:30,180 --> 00:03:31,590 ის აპირებს დაცემას სხვა ფილიალში. 76 00:03:31,590 --> 00:03:33,240 იგი აპირებს მიიღოს, რომ ხაზი კოდი. 77 00:03:33,240 --> 00:03:35,710 დიახ, მე ვაპირებ დაბრუნებას ოთხჯერ. 78 00:03:35,710 --> 00:03:41,270 Oh, factorial of -3 ასე factorial of 4 დამოკიდებულია factorial 3 დამთავრებული. 79 00:03:41,270 --> 00:03:43,055 >> ასე რომ, მას სჭირდება, რომ მოვუწოდო factorial 3. 80 00:03:43,055 --> 00:03:45,180 და რომ კარგად გავლა იგივე პროცესი კიდევ ერთხელ. 81 00:03:45,180 --> 00:03:48,200 იგი იწყება მეშვეობით, იღებს აქ. 82 00:03:48,200 --> 00:03:50,980 Factorial 3 დამოკიდებული on ფაქტორიალი 1. 83 00:03:50,980 --> 00:03:53,750 ასე რომ, ის ფაქტორიალი 2 იწყება, იღებს აქ. 84 00:03:53,750 --> 00:03:56,310 ეს დამოკიდებულია ფაქტორიალი 1. 85 00:03:56,310 --> 00:03:57,430 Factorial 1 იწყება. 86 00:03:57,430 --> 00:03:57,650 >> OK. 87 00:03:57,650 --> 00:03:59,775 ასე რომ, ახლა, ჩვენ ვიღებთ სადღაც საინტერესოა, არა? 88 00:03:59,775 --> 00:04:02,190 ახლა, 1 უდრის 1. 89 00:04:02,190 --> 00:04:05,130 ასე რომ, ჩვენ დაბრუნდნენ 1. 90 00:04:05,130 --> 00:04:06,770 ამ ეტაპზე, ჩვენ ვუბრუნებთ. 91 00:04:06,770 --> 00:04:07,880 ფუნქცია კეთდება. 92 00:04:07,880 --> 00:04:11,140 ეს ქცევა is-- იქ სხვა არაფერი ეს უნდა გააკეთოს, 93 00:04:11,140 --> 00:04:17,006 და ასე დასტის ჩარჩო ფაქტორიალი 1 pops off. 94 00:04:17,006 --> 00:04:17,589 ეს დასრულდა. 95 00:04:17,589 --> 00:04:19,480 იგი დაბრუნდა 1. 96 00:04:19,480 --> 00:04:23,370 და ახლა, ის ფაქტორიალი 2, რომელიც იყო ჩარჩო დაუყოვნებლივ ქვემოთ 97 00:04:23,370 --> 00:04:26,160 დასტის, ხდება აქტიური ჩარჩო. 98 00:04:26,160 --> 00:04:29,030 >> და მას შეუძლია შეარჩიო სწორედ იქ, სადაც შეჩერდით. 99 00:04:29,030 --> 00:04:32,240 ის ელოდა ფაქტორიალი 1 დასრულება მისი მუშაობა. 100 00:04:32,240 --> 00:04:33,610 ეს უკვე დასრულდა. 101 00:04:33,610 --> 00:04:35,510 ასე რომ, აქ ვართ. 102 00:04:35,510 --> 00:04:38,080 >> Factorial 1 დაბრუნდა ღირებულების 1. 103 00:04:38,080 --> 00:04:42,430 ასე რომ, ის ფაქტორიალი 2 can ვთქვათ დაბრუნდეს 2-ჯერ 1. 104 00:04:42,430 --> 00:04:43,680 მისი მუშაობა არის შესრულებული. 105 00:04:43,680 --> 00:04:49,110 ის დაბრუნდა 2 factorial 3, რომელიც ელოდა კიდეც მას. 106 00:04:49,110 --> 00:04:53,370 Factorial 3 არის ყველაზე ფარგლებში, აქტიური ჩარჩო დასტის. 107 00:04:53,370 --> 00:04:58,617 ასე რომ, ის ამბობს, OK, ასევე, მე ვაპირებ დაბრუნებას 3-ჯერ 2, რომელიც არის 6. 108 00:04:58,617 --> 00:05:00,700 და მე ვაპირებ მისცეს, რომ ვაფასებთ უკან ფაქტორიალი 109 00:05:00,700 --> 00:05:03,430 4, რომელიც უკვე მელოდება. 110 00:05:03,430 --> 00:05:04,500 მე გაკეთდეს. 111 00:05:04,500 --> 00:05:09,410 Factorial 3 pops off დასტის, და ფაქტორიალი 4 არის აქტიური ჩარჩო. 112 00:05:09,410 --> 00:05:13,510 >> 4 ამბობს, OK, მე ვაპირებ დაბრუნებას 4 ჯერ factorial 3, რომელიც ექვსი. 113 00:05:13,510 --> 00:05:15,980 ეს იყო ღირებულება, factorial 3 დაბრუნდა. 114 00:05:15,980 --> 00:05:19,010 ასე რომ 4-ჯერ 6 არის 24. 115 00:05:19,010 --> 00:05:20,990 და მე ვაპირებ გაივლის რომ უკან factorial 116 00:05:20,990 --> 00:05:23,160 5, რომელიც უკვე მელოდება. 117 00:05:23,160 --> 00:05:25,270 Factorial 5 არის აქტიური ჩარჩო. 118 00:05:25,270 --> 00:05:30,700 ის აპირებს დაბრუნებას 5 ჯერ factorial of 4-- 5 ჯერ 24, ან 120-- 119 00:05:30,700 --> 00:05:32,722 და მისცეს, რომ მნიშვნელობა უკან მთავარი, რომელსაც აქვს 120 00:05:32,722 --> 00:05:35,680 ელოდა ძალიან მოთმინებით ამისთვის დიდი ხანია ბოლოში დასტის. 121 00:05:35,680 --> 00:05:36,640 >> ეს არის სადაც დაიწყო. 122 00:05:36,640 --> 00:05:37,670 ეს გააკეთა ამ მოწოდებას. 123 00:05:37,670 --> 00:05:39,400 რამდენიმე ფარგლებში აიღო ზედა. 124 00:05:39,400 --> 00:05:41,890 ეს არის უკან ზევით Stack. 125 00:05:41,890 --> 00:05:43,450 ეს არის აქტიური ჩარჩო. 126 00:05:43,450 --> 00:05:47,810 ასე რომ, მთავარი მიიღო ღირებულება 120 უკან ფაქტორიალი 5. 127 00:05:47,810 --> 00:05:50,750 ეს უკვე ელოდება ბეჭდვა, რომ მნიშვნელობა. 128 00:05:50,750 --> 00:05:51,657 და მერე ეს კეთდება. 129 00:05:51,657 --> 00:05:53,240 არ არსებობს უფრო მეტი ხაზი კოდი მთავარ. 130 00:05:53,240 --> 00:05:56,800 ასე რომ, მთავარი ის ფარგლებში pops off დასტის, და ჩვენ გავაკეთეთ. 131 00:05:56,800 --> 00:05:58,992 >> და ასე უკან მუშაობს. 132 00:05:58,992 --> 00:06:00,200 ეს არის ის, თუ როგორ დასტის ფარგლებში მუშაობს. 133 00:06:00,200 --> 00:06:03,120 იმ ფუნქციას რომ მოხდა მანამდე 134 00:06:03,120 --> 00:06:06,620 არიან მხოლოდ პაუზის ელოდება შემდგომი მოუწოდებს 135 00:06:06,620 --> 00:06:12,050 დასრულება, რათა მათ შეიძლება გახდეს აქტიური ვიზრუნოთ და დასრულდება, რაც მათ უნდა გავაკეთოთ. 136 00:06:12,050 --> 00:06:13,060 >> მე Doug Lloyd. 137 00:06:13,060 --> 00:06:14,880 ეს არის CS50. 138 00:06:14,880 --> 00:06:16,580