[Musika jotzen] DOUG LLOYD: seguruenik dela uste duzu kode besterik zeregin bat betetzeko erabiltzen da. , Idatziko duzu. Zerbait egiten du. Hori nahiko asko. Konpilatu duzu. Programa exekutatu beharko duzu. Ona joan zara. Baina sinetsi edo ez, bada denbora luzez kodea dituzu, benetan ikustera etorri dezakezun hori da eder zerbait bezala kodea. Arazo bat konpontzen da a modu oso interesgarria, edo zerbait besterik ez da benetan Bide batez, itxura buruz neat. Izango da barre dezakezu me at, baina egia da. Eta errekurtsio modu bat da Ideia hau lortzeko moduko eder, dotore-begira kodea. Arazoak konpontzen modutan egiten duten dira interesgarriak, erraz ikusteko, eta harrigarriro laburrak. Bide errekurtsio Lanek da, funtzio errekurtsiboa deiak funtzio bezala definitzen da bera bere exekuzioa parte gisa. Hori apur bat arraroa dirudi dezake, eta ikusiko dugu pixka bat hau nola une batean lan inguru. Baina, berriro ere, horiek prozedurak errekurtsiboak diren hain dotorea izango da ari dira joan delako arazo hau konpondu behar izan gabe beste funtzio horiek guztiak izatea edo loops luze hauetan. Ikusiko duzu errekurtsiboak horiek prozedurak dira hain laburra itxura du. Eta benetan ari den egiteko joan Zure kodea itxura askoz gehiago ederra. Emango dizut adibide bat Hori ikusteko nola prozedura errekurtsiboa definitu liteke. Beraz, hau ezagutzen, etatik matematika klasean orain dela urte asko, izeneko zerbait egin faktorial funtzioa, hau da, normalean harridura, gisa adierazten bertan zenbaki oso positiboak guztien gainetik definitzen da. Eta modu n faktoriala kalkulatzen da da guztia biderkatu baino zenbakiak gutxiago edo berdin n, elkarrekin Osoko zenbaki guztiak baino gutxiago edo n elkarrekin berdina. Beraz, 5 faktore 5 aldiz da 4 aldiz 3 aldiz 2 aldiz 1. Eta 4 faktore 4 aldiz da 3 aldiz 2 aldiz 1 eta abar. Ideia lortuko duzu. Programatzaileak, ez dugu erabili n, harridura. Beraz, faktore definitzen zaitugu funtzioaren n, hain zuzen ere. Eta faktore erabiliko dugu sortzea arazo baten irtenbidea errekurtsiboa. Eta agian aurkituko duzu, uste dut asko dela gehiago ikusmen Etorriko baino erakargarria honen bertsioa, eta horrek Aukera izango dugu begirada bat hartu, une batean. Hortaz, hona hemen pare bat facts-- Pun xedea factorial-- inguru faktorial funtzioa. 1 faktoriala, esan dudan bezala, 1 da. Nondik 2 faktoriala 2 aldiz 1 da. 3 faktore 3 da aldiz 2 aldiz 1, eta abar. 4 eta 5 dagoeneko buruz hitz egin dugu. Baina hau begira, ez da hori egia? Hau da, ez du 2 faktore besterik 2 aldiz 1 faktoriala? Esan nahi dut, 1 faktoriala 1 da. Beraz, zergatik ezin esan garela, nondik 2 faktore geroztik 2 aldiz 1 da, benetan da 2 aldiz 1 faktoriala? Eta gero, ideia hori zabaltzen, Ez da 3 faktore besterik 3 aldiz 2 faktoriala? Eta 4 faktoriala 4 aldiz da 3, eta abar faktoriala? Izan ere, faktore Bat zenbakiaren besterik bagenu adieraz mota ren eraman honek egindako betiko. Mota dezakezu orokortu dugu faktore arazoa izan ere n garaiak faktore n ken 1. Produktua n aldiz etorri da zenbaki guztiak ni baino gutxiago. Ideia hori, hau arazoa orokortu, ahalbidetzen errekurtsiboki gurekin faktore funtzioa definitu. Funtzio bat definitzen duzu errekurtsiboki, ez da horren zati bat izan behar duten bi gauza. Zerbait izeneko bat eduki behar duzu base kasuan, zein izango da, baldin aktibatu behar dituzu, errekurtsiboak prozesua eten egingo da. Bestela, funtzio hori deiak itself-- baliteke imagine-- gisa ezin betiko joan. Funtzioa funtzioa deitzen funtzio deiak deiak funtzioa funtzioa deitzen. Izan ez baduzu, modu bat izan gelditu, zure programa eraginkortasunez egingo trabatuta begizta amaigabea sortu zen. Azkenean, huts egingo du, Egingo memoria agortu delako. Baina hori puntu ondoan da. Beste batzuk gelditzeko bidea izan behar dugu Gauzak gure programa bertan behera gelditzen gain, hori izorratzen programa bat dagoelako Seguru asko ez eder ez dotoreak. Eta, beraz, hau oinarri kasuan deitu dugu. Hau irtenbide erraz bat da Arazo bat bertan gelditzen da prozesua errekurtsiboak gertatzen from. Beraz, horren zati bat da funtzio errekurtsiboa. Bigarren zatian, kasu errekurtsiboak da. Eta hau da, non errekurtsibitateko benetan izango. Hau da, non funtzio bera deituko. Horrela ez da berez deitu zehazki in Modu berean, deitzen zen. Aldakuntza txiki bat besterik ez da izango duten arazoa da, egiten teeny apur bat txikiagoak konpondu nahian. Baina, oro har, Buck pasatzen da Konponbide ontziratu konpontzeko ezberdinak dei bat lerro behera. Begiradak horietatik zein oinarri kasuan hemen bezala? Zein itxura duen horietako bat errazena arazo baten irtenbidea? Faktorialen mordo bat dugu, eta jarraitu dugu joan on-- 6, 7, 8, 9, 10, eta abar. Baina itxura hauetako bat Kasu ona base kasua izan da. Konponbidea oso erraza da. Ez dugu ezer berezirik egin behar. 1 faktoriala 1 besterik ez da. Guk ez dugu izan inolako egin biderketa batere. Goaz bada dirudi eta saiatu arazo hau konpondu, eta gelditu behar dugu errekurtsio nonbait, ziurrenik gelditu nahi dugu egiten denean, 1 lortuko dugu. Guk ez dugu horren aurretik gelditu nahi. Beraz, ez dugu definitzeko ari bada Gure faktore funtzioa, Hemen ekarriko duen hezurdura bat nola egiten dugu agian. Bi horiek gauza konektatu behar dugu oinarri kasuan eta Errekurtsiboaren kasuan. Zer da oinarri kasuan? N 1 berdina bada, itzultzeko 1-- hori da Arazoa oso sinplea da konpondu. 1 faktoriala 1 da. Ez da 1 aldiz ezer. Ez besterik 1 da. Izan ere, oso erraza da. Eta beraz, gure base kasuan izan daiteke. Ezagutu genuen gainditu 1 honetara bada funtzioa, besterik ez dugu itzuli 1. Zer da Errekurtsiboaren Kasu seguruenik itxura? Beste zenbaki bakoitzeko 1 gainera, zer da eredua? Beno, guk hartzen ari bada n faktoriala, n faktoriala da, n aldiz ken 1. Dugu faktore hartzen ari bazara 3koa, 3 ken 1 faktoriala 3 aldiz da, edo 2. Eta ez ditut orain badugu 1 begira, bestela Bueltan n garaiak faktore n ken 1. Nahiko erraza da. Eta apur bat izatea mesedetan garbiagoak eta dotoreago kodea, badakiela single-line loops badaukagu edo single-line baldintzapeko adar, ezin dugu guztia kentzeko horien inguruan kizkur giltza. Beraz, hau sendotzen doan neurrian. Hau ditu berdin-berdin funtzionalitate honek bezala. Kanpoan egiten dudanean kizkur du giltza, ez lerro bakarra delako baldintzapeko adarretan horiek barruan. Beraz, hauek jokatu berdinean. N 1 berdina bada, itzultzeko 1. Bestela n aldiz itzuli n ken 1 faktoriala. Beraz, arazoa txikiagoak egiten ari gara. N hasten bada 5. bezala, goaz itzultzeko 4 faktoriala 5 aldiz. Eta minutu bat ere ikusiko dugu nola hitz egiten dugun deiaren beste bideo bat stack-- buruz non buruz hitz egiten dugunean deitu stack-- ikasiko dugu zergatik zehazki prozesu honek funtzionatzen. Baina 5 faktore berriz dio itzultzeko 5 aldiz faktore 4, eta 4 hau da, esatea OK, ondo joan, itzulera 4 aldiz 3 faktore. Eta ikusiko duzunez, ez gara Sort hurbiltzen 1. Hurbiltzen ari gara eta oinarri kasuan hurbilago. Eta behin base kasuan hit dugu, aurreko funtzio guztiak ziren bilatzen erantzunik. Nondik 2 Factorial zen bueltan esanez 2 aldiz 1 faktoriala. Beno, 1 1 itzultzen faktoriala. Beraz, faktore egiteko deia Guztira: 2 2 aldiz 1 itzultzeko, eta faktoriala itzuli dela ematen 3, hau da, emaitza horren zain. Eta gero, kalkulatu ahal izango da bere emaitza, 3 aldiz 2 6 da, eta atzera emateko 4 faktoriala da. Eta berriro ere, bat egin behar dugu Bideo-dei pilan non Horren adibide apur bat oraintxe esaten dudana baino gehiago. Baina hau ez da. Bakarrik honen konponbidea da zenbaki baten faktoriala kalkulatzeko. Kode lerro lau besterik ez da. Hori nahiko cool, ezta? Sexy mota da. Beraz, oro har, baina ez beti, funtzio errekurtsiboa batean begizta bat ordezkatu ahal funtzio ez-errekurtsiboa. Hortaz, hona hemen, aldamenean, da iteratibo du faktore funtzio bertsioa. Kalkulatu horiek biak gauza berdina. N faktoriala kalkulatu biek. Ezkerrean bertsioa errekurtsio egin behar den erabiltzen. Eskuin hegaletik bertsioa iterazio egin behar den erabiltzen. Eta, adi, deklaratzeko daukagu aldagai bat zenbaki oso produktu bat. Eta gero, begizta. Beraz, luze 0 baino handiagoa n bezala, dugu mantentzeko by n produktua biderkatzeko eta arte decrementing n Produktu kalkulatu dugu. Beraz, bi funtzio horiek, berriro, zehazki gauza bera egiten. Baina ez dute ezer egiten hasi zehazki modu berean. Orain, posible da horri base bat baino gehiago izan Kasu edo bat baino gehiago Kasu errekurtsiboak, arabera zer funtzioa egiten saiatzen da. Ez zaude zertan bakarrik mugatzen base bat kasu bakar edo errekurtsiboak bakar bat Kasu. Beraz, zerbait adibide bat base anitz kasu egongo den Halako du Fibonacci zenbaki sekuentzia. Gogora ekarri ahal izango duzu oinarrizko eskola egun Fibonacci sekuentzia definitzen da Halako lehen elementua 0 da. Bigarren elementua 1 da. Horietako bi besterik definizioz dira. Gero, beste elementu guztietan definitzen da n ken 1 eta n ken 2 batuketa bezala. Hirugarren elementua So litzateke 0 plus 1 da 1. Eta gero, laugarren elementu Bigarren elementua, 1 izango litzateke, gehi hirugarren elementua 1. Eta hori 2 izango litzateke. Eta abar, eta abar. Beraz, kasu honetan, base bi kasu izan ditugu. N 1 berdina bada, itzultzeko 0. N 2 berdina bada, itzultzeko 1. Bestela, itzultzeko Fibonacci-ren n ken 1 plus n ken 2 Fibonacci. Beraz, hori oinarri anitz kasutan da. Zer kasutan errekurtsiboak anitz buruz? Beno, bada zerbait Collatz aierua deritzo. Ez dut esan, badakizu zer dela, Egia esan, gure final delako Bideo hau bereziki arazoa. Eta gure ariketa da elkarrekin lan egiteko. Hortaz, hona hemen zer egin Collatz aierua is-- aplikatzen oso positibo guztietan da. Eta espekulatzen da, hori da beti posible lortzeko itzuli 1 urrats horiek jarraitu baduzu. N 1 bada, gelditzeko. Lortu dugu atzera 1era n 1 bada. Honen bidez Bestela, joan prozesua berriro on N 2 banatuta. Eta ikusten duzu atzera eskuratzeko 1 badaiteke. Bestela, n bakoitia bada, joan bidez Prozesu hau berriro 3N plus 1, edo 3 aldiz n gehi 1. Hortaz, hona base bat kasu bakar dugula. N 1 berdina bada, gelditzeko. Ez dugu inolako errekurtsio gehiago egiten. Baina bi kasuetan errekurtsiborik dugu. N bikoitia bada, errekurtsiboak bat egiten dugu Kasu, deituz n 2 banatuta. N bakoitia bada, desberdin bat egiten dugu 3 aldiz n plus 1ean kasuan errekurtsiboak. Eta orain bideo honen helburua da bigarren bat hartu, pausatu bideoa, eta saiatu eta idatzi hau Funtzio errekurtsiboak Collatz Bertan ere balio n bat pasatzen duzu, eta urrats zenbatek kalkulatzen du 1era iritsi hasten bada n bildu du eta, batez ere, urrats horiek jarraitu nahi izanez gero. N 1 badago, 0 pausu behar da. Bestela, da joan urrats bat plus ordea hartu Urrats asko hartzen n banatan 2 banatuta n bikoitia bada, edo 3N plus 1 n bakoitia bada. Orain, jarri ditut pantailan hemen Proba zuretzat gauza pare bat, probak kasu pare bat zuretzat, ikusi zer hainbat Collatz zenbakiak honako hauek dira, eta, era berean, ilustrazio bat urrats duten beraz, ahal duzun pasatu behar dira Ordena ikusten martxan jarritako prozesu honetan. Beraz n berdina bada 1, n Collatz 0 da. Ez daukazu egin ezer lortzeko itzuli 1era. Dagoeneko zara han. N 2 bada, ere hartzen du Urrats bat 1 iristeko. Hasteko 2 dituzu. Beno, 2 ez da 1 berdina. Beraz, urrats bat izango da plus urrats ordea askok hartzen N 2 banatuta. 2 2 banatuta 1 da. Beraz, urrats bat plus ordea hartzen du Urrats asko 1 hartzen du. 1 hartzen zero pausoak. 3. Zeren, ikusten duzunez, ez da hartzen duten urratsak gutxi batzuk. 3tik joan zaitezke. Eta gero joan behar duzu 10, 5, 16, 8, 4, 2, 1. Zazpi urrats hartzen dadin 1era. Eta ikusiko duzunez, ez da bat Bikote beste proba kasuak hemen probatzeko zure programa. Beraz, berriro ere, eten bideoa. Eta joan naiz salto back orain benetako prozesu zer da hemen, uste hori zer den. Ikusi duzu irudikatu ahal bada n Collatz nola definitu kalkulatzen duen, zenbat orain 1era iritsi hartzen pausoak. Beraz, espero dugu, bideo-eten duzu eta zuk ez dira nire zain erantzuna emateko hemen. Baina bazaude, bai, Hona hemen erantzuna hala ere. Beraz, hemen posible definizio bat Collatz funtzioaren. Gure oinarri Beraz Kasu n badago 1 berdina, itzuliko gara 0. Ez du inolako hartu urrats atzera egin nahi 1era. Bestela, bi kasu batzuetan errekurtsiborik dugu zenbakiak, nahiz eta beste bat bakoitietan bat. Bide batez, zenbakiak are probatzeko I n mod 2 berdin 0 egiaztatzeko. Hau da, funtsean, berriz ere, galdera galdetuz, Gogora zer mod is-- galtzen dut arrail 2 by n ez da gainerako no? Hori are kopuru bat izango litzateke. Eta hain n mod 2 berdinen 0 da azterketa da hau Zenbaki. Hala bada, itzultzeko 1 nahi dut, hau da, behin betiko delako urrats bat gehi Collatz hartu edozein zenbakia me erdia da. Bestela, itzultzeko 1 nahi dut plus Collatz 3 aldiz n gehi 1. Hori izan zen, bestea Urrats errekurtsiboak garela kalkulatzeko har lezake Collatz-- urrats kopurua Atzera lortu hartzen du 1 zenbakia dute. Beraz, espero dugu, adibide honetan Pixka bat eman zenuen prozedurak errekurtsiboak zaporea bat. Zorionez, uste duzu kode da gutxi ederragoa bada inplementatu , modu dotorean errekurtsiboak ere. Baina ez bada ere, errekurtsio da tresna oso indartsua hala ere. Eta, beraz, behin betiko da zerbait zure burua lortu ahal izateko, duzun, sortzeko gai izan dugu programak nahiko cool errekurtsio erabiliz liteke hori, edonola ere, konplexua den idatzi you loops eta iterazio erabiliz gero. Naiz Doug Lloyd. Hau CS50 da.