1 00:00:00,000 --> 00:00:03,110 >> LUIDSPREKER 1: In dat laatste versie van het sigma, ik uitgevoerd wat ik zou noemen 2 00:00:03,110 --> 00:00:06,570 een iteratieve oplossing, waarbij ik gebruik gemaakt van een voorwaartse lus te tellen alle 3 00:00:06,570 --> 00:00:09,720 getallen tussen 1 en m, daarna retourneren van de som. 4 00:00:09,720 --> 00:00:12,560 >> Maar het blijkt dat we kunnen een ander gebruiken techniek om dezelfde uitvoering 5 00:00:12,560 --> 00:00:15,120 functie, een techniek bekend als recursie. 6 00:00:15,120 --> 00:00:19,360 Een recursieve functie, om zo te zeggen, is gewoon een die zelf noemt. 7 00:00:19,360 --> 00:00:21,290 Nu, in en van zichzelf, dat kan een probleem worden. 8 00:00:21,290 --> 00:00:24,500 Als een functie gewoon zichzelf noemt die noemt zichzelf dat zelf noemt, 9 00:00:24,500 --> 00:00:26,080 dat proces zou ooit bot eindigen. 10 00:00:26,080 --> 00:00:30,490 Maar zolang we hebben een zogenaamd base case, een aandoening die ervoor zorgt 11 00:00:30,490 --> 00:00:34,930 dat in sommige situaties die we niet bellen onszelf, dat proces van anders 12 00:00:34,930 --> 00:00:37,070 oneindige looping moet ophouden. 13 00:00:37,070 --> 00:00:39,180 >> Laten we nu herimplementeren sigma als volgt. 14 00:00:39,180 --> 00:00:43,810 Als n kleiner is dan of gelijk aan 0, ik gewoon, en enigszins willekeurig, 15 00:00:43,810 --> 00:00:45,670 ga terug 0. 16 00:00:45,670 --> 00:00:49,370 Anders wat ik ga doen is eigenlijk berekenen sigma voor de positieve int 17 00:00:49,370 --> 00:00:50,460 dat ik heb ingeleverd. 18 00:00:50,460 --> 00:00:52,050 >> Nu, wat is sigma van m? 19 00:00:52,050 --> 00:00:55,480 Wel, sigma van m is, natuurlijk de som van 1 omhoog door m.. 20 00:00:55,480 --> 00:00:58,820 Maar als we er over nadenken de andere kant op, het is gewoon de som van m plus m 21 00:00:58,820 --> 00:01:02,560 minus 1 plus m minus 2 enzovoort, helemaal naar beneden tot 1. 22 00:01:02,560 --> 00:01:08,080 Dus in die zin, het lijkt erop dat Ik kon gewoon terug m plus. 23 00:01:08,080 --> 00:01:10,210 >> En dan moet ik m minus 1 plus m minus 2. 24 00:01:10,210 --> 00:01:13,470 Maar ik heb een functie die kan geven me precies dat antwoord, namelijk 25 00:01:13,470 --> 00:01:16,340 sigma M minus 1. 26 00:01:16,340 --> 00:01:19,670 >> Nu, ik bellen op deze manier niet lijkt het beste idee. 27 00:01:19,670 --> 00:01:22,610 Want als sigma belt sigma waarin wordt opgeroepen sigma die sigma belt, u 28 00:01:22,610 --> 00:01:24,480 zou denken dat dit proces zou je nooit eindigen. 29 00:01:24,480 --> 00:01:27,720 Maar dat is waarom we de zogenaamde base geval de bovenkant van deze functie. 30 00:01:27,720 --> 00:01:31,540 De als voorwaarde dat controleert als m minder dan of gelijk aan 0 Ik ga niet 31 00:01:31,540 --> 00:01:32,610 om mezelf te bellen. 32 00:01:32,610 --> 00:01:37,010 Ik ga in plaats daarvan gaat terug 0, wat beurt zal worden toegevoegd aan de 33 00:01:37,010 --> 00:01:39,950 vorige nummers die ik heb het optellen up, deze daarmee te stoppen 34 00:01:39,950 --> 00:01:41,740 anders oneindig proces. 35 00:01:41,740 --> 00:01:43,710 >> Laten we nu zien of dit nieuwe implementatie werkt. 36 00:01:43,710 --> 00:01:46,510 Laten we het redden, compileren, en Dit programma starten. 37 00:01:46,510 --> 00:01:50,640 Maak sigma 1 dot slash sigma 1. 38 00:01:50,640 --> 00:01:52,900 En laten we voorzien van de dezelfde nummers als voorheen. 39 00:01:52,900 --> 00:01:55,520 2, dat moet hopelijk geef me 3. 40 00:01:55,520 --> 00:01:58,970 Laten we te voorzien van 3, die hopelijk geef me 6. 41 00:01:58,970 --> 00:02:03,480 En laten we tenslotte te voorzien van 50, die inderdaad geeft me 1275. 42 00:02:03,480 --> 00:02:06,130