1 00:00:00,000 --> 00:00:03,110 >> SPEAKER 1: I den siste versjonen av sigma, implementert jeg det jeg vil kalle 2 00:00:03,110 --> 00:00:06,570 en iterativ løsning, der jeg brukte en frem sløyfe for å telle opp all 3 00:00:06,570 --> 00:00:09,720 tall mellom 1 og m, deretter tilbake summen. 4 00:00:09,720 --> 00:00:12,560 >> Men det viser seg at vi kan bruke en annen teknikk for å implementere den samme 5 00:00:12,560 --> 00:00:15,120 funksjon, en teknikk kjent som rekursjon. 6 00:00:15,120 --> 00:00:19,360 En rekursiv funksjon, så å si, er rett og slett en som kaller seg. 7 00:00:19,360 --> 00:00:21,290 Nå, i seg selv, at kan være et problem. 8 00:00:21,290 --> 00:00:24,500 Hvis en funksjon kaller rett og slett seg selv som kaller seg som kaller seg, 9 00:00:24,500 --> 00:00:26,080 at prosessen kan bot noensinne ende. 10 00:00:26,080 --> 00:00:30,490 Men så lenge som vi inkludere en såkalt basis tilfelle, en tilstand som sikrer 11 00:00:30,490 --> 00:00:34,930 at det i enkelte situasjoner kan vi ikke kalle oss selv, at prosessen med ellers 12 00:00:34,930 --> 00:00:37,070 uendelig looping bør opphøre. 13 00:00:37,070 --> 00:00:39,180 >> La oss nå reimplement sigma som følger. 14 00:00:39,180 --> 00:00:43,810 Hvis n er mindre enn eller lik 0, er jeg rett og slett, og noe tilfeldig, 15 00:00:43,810 --> 00:00:45,670 kommer til å returnere 0. 16 00:00:45,670 --> 00:00:49,370 Else hva jeg kommer til å gjøre er faktisk beregne sigma for den positive int 17 00:00:49,370 --> 00:00:50,460 at jeg har blitt overlevert. 18 00:00:50,460 --> 00:00:52,050 >> Nå, hva er sigma av m? 19 00:00:52,050 --> 00:00:55,480 Vel, sigma for m er, selvfølgelig, summen av 1 og opp gjennom m. 20 00:00:55,480 --> 00:00:58,820 Men hvis vi tenker på det den andre veien, det er rett og slett summen av m pluss m 21 00:00:58,820 --> 00:01:02,560 minus en pluss minus 2 m og så videre, hele veien ned til en. 22 00:01:02,560 --> 00:01:08,080 Så i den forstand, virker det som Jeg kunne bare gå tilbake m pluss. 23 00:01:08,080 --> 00:01:10,210 >> Og da trenger jeg m minus 1 pluss m minus to. 24 00:01:10,210 --> 00:01:13,470 Men jeg har en funksjon som kan gi meg nettopp det svaret, nemlig 25 00:01:13,470 --> 00:01:16,340 sigma av m minus en. 26 00:01:16,340 --> 00:01:19,670 >> Nå kaller meg selv på denne måten ikke virke som den beste ideen. 27 00:01:19,670 --> 00:01:22,610 Fordi hvis sigma kaller sigma som kaller sigma som kaller sigma, du 28 00:01:22,610 --> 00:01:24,480 skulle tro at denne prosessen kanskje aldri ende. 29 00:01:24,480 --> 00:01:27,720 Men det er derfor vi hadde den såkalte basen tilfelle ved toppen av denne funksjon. 30 00:01:27,720 --> 00:01:31,540 Hvis betingelsen som sjekker hvis m er mindre enn eller lik 0 Jeg har ikke tenkt 31 00:01:31,540 --> 00:01:32,610 å kalle meg selv. 32 00:01:32,610 --> 00:01:37,010 Jeg stedet kommer til å returnere 0, som i sin tur kommer til å bli lagt til 33 00:01:37,010 --> 00:01:39,950 tidligere tall som jeg har blitt summere opp, dermed stoppe dette 34 00:01:39,950 --> 00:01:41,740 ellers uendelig prosess. 35 00:01:41,740 --> 00:01:43,710 >> La oss nå se om denne nye implementeringen fungerer. 36 00:01:43,710 --> 00:01:46,510 La oss redde, kompilere, og kjøre dette programmet. 37 00:01:46,510 --> 00:01:50,640 Gjør sigma en prikk slash sigma 1. 38 00:01:50,640 --> 00:01:52,900 Og la oss gi det med samme tallene som før. 39 00:01:52,900 --> 00:01:55,520 2, som skal forhåpentligvis gi meg tre. 40 00:01:55,520 --> 00:01:58,970 La oss gi det tre, som skal forhåpentligvis gi meg seks. 41 00:01:58,970 --> 00:02:03,480 Og la oss endelig gi den med 50, noe som faktisk gir meg 1275. 42 00:02:03,480 --> 00:02:06,130