1 00:00:00,000 --> 00:00:03,110 >> SPEAKER 1: I den sidste udgave af sigma, jeg implementeret hvad jeg ville kalde 2 00:00:03,110 --> 00:00:06,570 en iterativ løsning, hvor jeg brugte en frem loop at tælle op alle 3 00:00:06,570 --> 00:00:09,720 tal mellem 1 og m, derefter returnere sum. 4 00:00:09,720 --> 00:00:12,560 >> Men det viser sig, at vi kan bruge en anden teknik til at gennemføre den samme 5 00:00:12,560 --> 00:00:15,120 funktion, en teknik kendt som rekursion. 6 00:00:15,120 --> 00:00:19,360 En rekursiv funktion, så at sige, er simpelthen en, der kalder sig selv. 7 00:00:19,360 --> 00:00:21,290 Nu, i sig selv, at kan være et problem. 8 00:00:21,290 --> 00:00:24,500 Hvis en funktion kalder simpelthen selv som kalder sig selv som kalder sig selv, 9 00:00:24,500 --> 00:00:26,080 at processen kan bot nogensinde ender. 10 00:00:26,080 --> 00:00:30,490 Men så længe vi inkluderer et såkaldt base case, en tilstand, der sikrer 11 00:00:30,490 --> 00:00:34,930 at der i nogle situationer vil vi ikke kalde os, at processen ellers 12 00:00:34,930 --> 00:00:37,070 uendelig looping bør ophøre. 13 00:00:37,070 --> 00:00:39,180 >> Lad os nu reimplement sigma som følger. 14 00:00:39,180 --> 00:00:43,810 Hvis n er mindre end eller lig med 0, I er enkelt, og noget arbitrært 15 00:00:43,810 --> 00:00:45,670 kommer til at vende tilbage 0. 16 00:00:45,670 --> 00:00:49,370 Else hvad jeg har tænkt mig at gøre, er faktisk beregne sigma for den positive int 17 00:00:49,370 --> 00:00:50,460 at jeg har været afleveret. 18 00:00:50,460 --> 00:00:52,050 >> Nu, hvad er sigma af m? 19 00:00:52,050 --> 00:00:55,480 Nå, sigma af m er naturligvis summen af ​​1 op gennem m.. 20 00:00:55,480 --> 00:00:58,820 Men hvis vi tænker over det den anden vej, det er simpelthen summen af ​​m plus m 21 00:00:58,820 --> 00:01:02,560 minus 1 plus m minus 2 og så videre, hele vejen ned til 1. 22 00:01:02,560 --> 00:01:08,080 Så i den forstand, ser det ud til, at Jeg kunne blot returnere m plus. 23 00:01:08,080 --> 00:01:10,210 >> Og så er jeg nødt m minus 1 plus m minus 2. 24 00:01:10,210 --> 00:01:13,470 Men jeg har en funktion, der kan give mig netop svaret, nemlig 25 00:01:13,470 --> 00:01:16,340 sigma af m minus 1. 26 00:01:16,340 --> 00:01:19,670 >> Nu kalde mig selv på denne måde ikke synes som den bedste idé. 27 00:01:19,670 --> 00:01:22,610 Fordi hvis sigma kalder sigma som opfordrer sigma som opfordrer sigma, du 28 00:01:22,610 --> 00:01:24,480 ville synes, at denne proces måske aldrig ender. 29 00:01:24,480 --> 00:01:27,720 Men det er derfor, vi havde den såkaldte bund tilfælde på toppen af ​​denne funktion. 30 00:01:27,720 --> 00:01:31,540 Den hvis betingelse, tjekker, om m er mindre end eller lig med 0 Jeg har ikke tænkt mig 31 00:01:31,540 --> 00:01:32,610 at kalde mig selv. 32 00:01:32,610 --> 00:01:37,010 Jeg i stedet kommer til at returnere 0, hvilket igen vil blive føjet til 33 00:01:37,010 --> 00:01:39,950 tidligere numre, som jeg har været opsummering op, og derved forhindre dette 34 00:01:39,950 --> 00:01:41,740 ellers uendelig proces. 35 00:01:41,740 --> 00:01:43,710 >> Lad os nu se, om det nye implementering fungerer. 36 00:01:43,710 --> 00:01:46,510 Lad os gemme, kompilere, og køre dette program. 37 00:01:46,510 --> 00:01:50,640 Gør sigma 1 prik skråstreg sigma 1. 38 00:01:50,640 --> 00:01:52,900 Og lad os give den de samme tal som før. 39 00:01:52,900 --> 00:01:55,520 2, som skulle forhåbentlig give mig 3. 40 00:01:55,520 --> 00:01:58,970 Lad os give det 3, hvilket vil forhåbentlig give mig 6. 41 00:01:58,970 --> 00:02:03,480 Og lad os endelig give det 50, der faktisk giver mig 1.275. 42 00:02:03,480 --> 00:02:06,130