http://wiki.math.bme.hu/history/Informatika2-2015/Eloadas_2_Python-2_Rekurzio_es_Ciklus?feed=atom&Informatika2-2015/Eloadas 2 Python-2 Rekurzio es Ciklus - Laptörténet2024-03-29T01:15:13ZAz oldal laptörténete a wikibenMediaWiki 1.18.1http://wiki.math.bme.hu/index.php?title=Informatika2-2015/Eloadas_2_Python-2_Rekurzio_es_Ciklus&diff=10464&oldid=prevCsirke, 2015. február 18., 23:24-n2015-02-18T23:24:13Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">←Régebbi változat</td>
<td colspan='2' style="background-color: white; color:black;">A lap 2015. február 18., 23:24-kori változata</td>
</tr><tr><td colspan="2" class="diff-lineno">112. sor:</td>
<td colspan="2" class="diff-lineno">112. sor:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Nézünk majd példákat a gyakorlaton.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Nézünk majd példákat a gyakorlaton.</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">= Mutable és Immutable típusok =</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">A pythonban két fajta változó van, mutable (kb. "változtatható"), és immutable (kb. "nem változtatható"). (Inkább az angol neveket használom, mert annak hogy nem változtatható változó nincs értelme, legalábbis nem az, amit igazából jelent az immutable.)</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">== Immutable ==</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Az immutable változó az egyszerűbb eset, ez az olyan változó, amiben bízhatunk, hogy csak akkor változik az értéke, ha mi értéket adunk neki:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"><wikiframe width="1100" height="600" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=a+%3D+5%0Ab+%3D+a%0Ab+%2B%3D+2%0Aprint+%22a%3A%22,+a%0Aprint+%22b%3A%22,+b%0A%0Anev+%3D+%22Moricka%22%0Akerdes+%3D+nev%0Akerdes+%2B%3D+%22-e%22%0Aprint+%22nev%3A%22,+nev%0Aprint+%22kerdes%3A%22,+kerdes&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=550&codeDivHeight=400"/></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">[http://pythontutor.com/visualize.html#code=a+%3D+5%0Ab+%3D+a%0Ab+%2B%3D+2%0Aprint+%22a%3A%22,+a%0Aprint+%22b%3A%22,+b%0A%0Anev+%3D+%22Moricka%22%0Akerdes+%3D+nev%0Akerdes+%2B%3D+%22-e%22%0Aprint+%22nev%3A%22,+nev%0Aprint+%22kerdes%3A%22,+kerdes&mode=display&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0 link]</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Itt az látható, hogy ugyan azt mondtuk, hogy "b = a", amikor utána megváltoztatjuk a ''b'' értékét, annak nincs hatása az ''a'' értékére.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Ilyen fajta, tehát immutable, például a:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">* minden féle szám, tehát egész, valós (float) vagy akár komplex</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">* igaz/hamis (boolean) változók</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">* karakterláncok</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">* tuple</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">== Mutable ==</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Kicsit nehezebb eset a mutable változók. Először nézzünk példa kódot</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"><wikiframe width="1100" height="600" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=jatekok+%3D+%5B%22Catan%22,+%22Carcassone%22,+%22Dominion%22%5D%0Ajojatekok+%3D+jatekok%0Ajojatekok%5B0%5D+%3D+%22Poker%22%0Aprint+%22jatekok%3A%22,+jatekok%0Aprint+%22jojatekok%3A%22,+jojatekok%0A%0Aosztalyzat+%3D+%7B%22Tofi%22+%3A+5%7D%0Aidei+%3D+osztalyzat%0Aidei%5B%22Csirke%22%5D+%3D+1%0Aprint+%22osztalyzat%3A%22,+osztalyzat%0Aprint+%22idei%3A%22,+idei&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=550&codeDivHeight=400"/></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">[http://pythontutor.com/visualize.html#code=jatekok+%3D+%5B%22Catan%22,+%22Carcassone%22,+%22Dominion%22%5D%0Ajojatekok+%3D+jatekok%0Ajojatekok%5B0%5D+%3D+%22Poker%22%0Aprint+%22jatekok%3A%22,+jatekok%0Aprint+%22jojatekok%3A%22,+jojatekok%0A%0Aosztalyzat+%3D+%7B%22Tofi%22+%3A+5%7D%0Aidei+%3D+osztalyzat%0Aidei%5B%22Csirke%22%5D+%3D+1%0Aprint+%22osztalyzat%3A%22,+osztalyzat%0Aprint+%22idei%3A%22,+idei&mode=display&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0 link]</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Itt azt láthatjuk, hogy amikor megváltoztatjuk a ''jojatekok'' értékét, akkor a ''jatekok'' értéke is megváltozik. Ez azért van, mert ugyan ''jatekok'' és ''jojatekok'' két külön változó, de ugyanarra a listára hivatkoznak. Ezt a python tutor is jelzi a fenti kódábrázolásban, azzal hogy nem a változó neve mellett van a lista tartalma, hanem onnan mutat egy nyíl a listára, és ott látható a tartalom.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Néhány változótípus, ami mutable:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">* Lista</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">* Szótár</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">* Halmaz</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">* Általában minden bonyolultabb dolog.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">== Problémák ==</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Miért fontos ez számunkra? Profibb felhasználók számára van amikor ezt jól ki tudják használni, hogy hatékony legyen a kódjuk. Azonban a jelenlegi szinten nekünk ez több problémát okoz, mint amiben segít. Ezért most arra koncentrálok, hogy hogyan tudjuk elkerülni hogy módosítsunk valamit amit nem akarunk. Egy példa:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"><wikiframe width="1100" height="600" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+osszead(L)%3A%0A++++osszeg+%3D+0%0A++++while+L%3A%0A++++++++osszeg+%2B%3D+L%5B0%5D%0A++++++++del+L%5B0%5D%0A++++return+osszeg%0A++++%0Aszamok+%3D+%5B3,+4,+2%5D%0Aszamok_ossz+%3D+osszead(szamok)%0A%23+Ki%C3%ADrjuk+a+sz%C3%A1mokat+%C3%A9s+az+%C3%B6sszeg%C3%BCk%0Aprint+szamok,+%22,+%C3%B6sszesen%22,+szamok_ossz&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=550&codeDivHeight=400"/></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">[http://pythontutor.com/visualize.html#code=def+osszead(L)%3A%0A++++osszeg+%3D+0%0A++++while+L%3A%0A++++++++osszeg+%2B%3D+L%5B0%5D%0A++++++++del+L%5B0%5D%0A++++return+osszeg%0A++++%0Aszamok+%3D+%5B3,+4,+2%5D%0Aszamok_ossz+%3D+osszead(szamok)%0A%23+Ki%C3%ADrjuk+a+sz%C3%A1mokat+%C3%A9s+az+%C3%B6sszeg%C3%BCk%0Aprint+szamok,+%22,+%C3%B6sszesen%22,+szamok_ossz&mode=display&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0 link]</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Ha csak az utolsó 4 sort olvassuk el, teljesen logikusnak tűnik a dolog, de mégsem működik, mert a függvényen belül megváltoztattuk a listát amit kaptunk. Általános megoldás amit javaslok, függvényen belül soha ne változtassunk meg olyan mutable változókat amiket paraméterként kaptunk. Ha úgy egyszerű a kódunk hogy az eredeti listából/szótárból törlünk vagy módosítunk, akkor először készítsünk egy másolatot. Például az előző kódunk javított változata így nézhet ki:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"><wikiframe width="1100" height="600" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+osszead(L_be)%3A%0A++++L+%3D+L_be%5B%3A%5D%0A++++osszeg+%3D+0%0A++++while+L%3A%0A++++++++osszeg+%2B%3D+L%5B0%5D%0A++++++++del+L%5B0%5D%0A++++return+osszeg%0A++++%0Aszamok+%3D+%5B3,+4,+2%5D%0Aszamok_ossz+%3D+osszead(szamok)%0A%23+Ki%C3%ADrjuk+a+sz%C3%A1mokat+%C3%A9s+az+%C3%B6sszeg%C3%BCk%0Aprint+szamok,+%22,+%C3%B6sszesen%22,+szamok_ossz&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=550&codeDivHeight=400"/></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">[http://pythontutor.com/visualize.html#code=def+osszead(L_be)%3A%0A++++L+%3D+L_be%5B%3A%5D%0A++++osszeg+%3D+0%0A++++while+L%3A%0A++++++++osszeg+%2B%3D+L%5B0%5D%0A++++++++del+L%5B0%5D%0A++++return+osszeg%0A++++%0Aszamok+%3D+%5B3,+4,+2%5D%0Aszamok_ossz+%3D+osszead(szamok)%0A%23+Ki%C3%ADrjuk+a+sz%C3%A1mokat+%C3%A9s+az+%C3%B6sszeg%C3%BCk%0Aprint+szamok,+%22,+%C3%B6sszesen%22,+szamok_ossz&mode=display&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0 link]</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Lista másolásához ez a '''[:]''' jelzés általános módszer a másoláshoz, a szótárnak van egy külön '''copy()''' metódusa, amit így lehet használni:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"><python>szotar = {"cica" : "kitten", "kutya" : "dog"}</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">szotar_masolat = szotar.copy()</python></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Egyelőre ennyit elég tudni a mutable típusokról, még a félév folyamán később visszatérünk rájuk.</ins></div></td></tr>
</table>Csirkehttp://wiki.math.bme.hu/index.php?title=Informatika2-2015/Eloadas_2_Python-2_Rekurzio_es_Ciklus&diff=10445&oldid=prevCsirke, 2015. február 17., 20:41-n2015-02-17T20:41:06Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">←Régebbi változat</td>
<td colspan='2' style="background-color: white; color:black;">A lap 2015. február 17., 20:41-kori változata</td>
</tr><tr><td colspan="2" class="diff-lineno">1. sor:</td>
<td colspan="2" class="diff-lineno">1. sor:</td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">=Bemutatkozás=</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">* Eisenberger András</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">* Hívjatok Csirkének</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">* email: [mailto:csirkeee@gmail.com csirkeee@gmail.com]</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;"></del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">=Python ismétlés=</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;"></del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">Aki nem 2014-ben hallgatta az Info1-et és úgy érzi lemaradása van, azok részére elérhetőek</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">* Az előző félév előadásainak anyagai: [[Informatika1-2014/eloadas3]], [[Informatika1-2014/eloadas4]]</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">* Vagy akár a hivatalos (angol) Python tanító anyag: [http://docs.python.org/2.7/tutorial/ Python tutorial].</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;"></del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">Mai órán még kb. elég az [[Informatika1-2014/eloadas3|eloadas3]] anyaga, ami kell az függvények definiálása, elágazások.</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;"></del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">A Python nagyon népszerű nyelv, többek között jól átlátható szintaxisa miatt, és mivel viszonylag könnyű új platformokra is átültetni. Ennek köszönhető, hogy rengeteg eszköz és erőforrás elérhető hozzá az interneten. Csak egy példa a http://pythontutor.com, amit itt az előadás lapjain is használunk a kód részletes bemutatásához, de ti is használhatjátok saját teszteléshez.</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Függvényhívás példa==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Függvényhívás példa==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del class="diffchange diffchange-inline">Python-ban a kódban bárhol definiálható függvény a kódban, a <code>def</code> kulcsszóval. Egyelőre most arról az esetről beszélünk csak, amikor a fájl gyökerében van definiálva, nem másik függvényen belül</del>.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">Múlt órán volt részletesen szó függvényhívásról</ins>. <ins class="diffchange diffchange-inline">Itt egy példa:</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div><wikiframe width="800" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+negyzet(k)%3A%0A++++return+k*k%0A%0Adef+negyzetel(l)%3A%0A++++for+i+in+range(len(l))%3A%0A++++++++l%5Bi%5D+%3D+negyzet(l%5Bi%5D)%0A++++return+l%0A++++%0Aszamok+%3D+%5B2,+3,+4%5D%0Aprint+negyzetel(szamok)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=350&codeDivHeight=400"/></div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div><wikiframe width="800" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+negyzet(k)%3A%0A++++return+k*k%0A%0Adef+negyzetel(l)%3A%0A++++for+i+in+range(len(l))%3A%0A++++++++l%5Bi%5D+%3D+negyzet(l%5Bi%5D)%0A++++return+l%0A++++%0Aszamok+%3D+%5B2,+3,+4%5D%0Aprint+negyzetel(szamok)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=350&codeDivHeight=400"/></div></td></tr>
<tr><td colspan="2" class="diff-lineno">24. sor:</td>
<td colspan="2" class="diff-lineno">10. sor:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>=Ciklus vagy rekurzió=</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>=Ciklus vagy rekurzió=</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">A mai órán két programozási módszerről lesz szó, amik már előző félévben is szerepeltek valamennyire. Megvizsgáljuk a különbségeket és hasonlóságokat, így talán jobban megértjük mindkettőt.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Először nézzünk egy nagyon egyszerű példát hogy felfrissítsük is hogy hogy működnek a cilusok és a rekurzív függvények:</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Faktoriális kiszámolása==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Faktoriális kiszámolása==</div></td></tr>
<tr><td colspan="2" class="diff-lineno">56. sor:</td>
<td colspan="2" class="diff-lineno">46. sor:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>[http://pythontutor.com/visualize.html#code=def+szorzotabla_rekurziv_belso(i,+j,+a,+b)%3A%0A++++print+i*j,%0A++++if+j+%3C+b%3A%0A++++++++szorzotabla_rekurziv_belso(i,+j%2B1,+a,+b)%0A++++elif+i+%3C+a%3A%0A++++++++print%0A++++++++szorzotabla_rekurziv_belso(i%2B1,+1,+a,+b)%0A%0Adef+szorzotabla_rekurziv(a,+b)%3A%0A++++szorzotabla_rekurziv_belso(1,+1,+a,+b)%0A++++++++%0Aszorzotabla_rekurziv(3,+4)&mode=display&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0 link]</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>[http://pythontutor.com/visualize.html#code=def+szorzotabla_rekurziv_belso(i,+j,+a,+b)%3A%0A++++print+i*j,%0A++++if+j+%3C+b%3A%0A++++++++szorzotabla_rekurziv_belso(i,+j%2B1,+a,+b)%0A++++elif+i+%3C+a%3A%0A++++++++print%0A++++++++szorzotabla_rekurziv_belso(i%2B1,+1,+a,+b)%0A%0Adef+szorzotabla_rekurziv(a,+b)%3A%0A++++szorzotabla_rekurziv_belso(1,+1,+a,+b)%0A++++++++%0Aszorzotabla_rekurziv(3,+4)&mode=display&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0 link]</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>Egy másik hátrány amit valamennyire mutat az előző kódrészlet, hogy ilyenkor a végére a függvény összes változata egyszerre fut. Ez nem minden programozási nyelven, és nem mindig igaz, de ha igen, akkor jelentősen több memóriát foglal ez a változat, mint a ciklussal megírt változat.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">Látható, hogy az '''i''' és '''j''' változókat is a függvény paraméterévé kellett tenni, hogy elérhetőek legyenek a belső kódban.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>Egy másik hátrány amit valamennyire mutat az előző kódrészlet<ins class="diffchange diffchange-inline">, ha megnézzük a Python Tutor-on a futását</ins>, hogy ilyenkor a végére a függvény összes változata egyszerre fut. Ez nem minden programozási nyelven, és nem mindig<ins class="diffchange diffchange-inline">, </ins>igaz, de ha igen, akkor jelentősen több memóriát foglal ez a változat, mint a ciklussal megírt változat.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Mivel rekurziónál a régebben kiszámolt értékek lehet hogy nem elérhetőek, ezért a gondtalanul megírt rekurzív kód lehet hogy fölöslegesen sokat számol. Példának itt van ez a '''rosszul megírt''' változata a fibonacci számok kiszámolásának:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Mivel rekurziónál a régebben kiszámolt értékek lehet hogy nem elérhetőek, ezért a gondtalanul megírt rekurzív kód lehet hogy fölöslegesen sokat számol. Példának itt van ez a '''rosszul megírt''' változata a fibonacci számok kiszámolásának:</div></td></tr>
<tr><td colspan="2" class="diff-lineno">65. sor:</td>
<td colspan="2" class="diff-lineno">57. sor:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Végigléptetve, a <code>fibonacci_rekurziv(3)</code> meg van hívva a 11-es és a 34-es lépésnél is, és mindkétszer újra ki van számolva. A matematikai gondolkodásmód szerint ugyan igaz hogy mindkét esetben a 3. fibonacci szám értékére van szükség, de programozásnál azt is végig kell gondolni hogy ez milyen lépésekkel fog járni.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Végigléptetve, a <code>fibonacci_rekurziv(3)</code> meg van hívva a 11-es és a 34-es lépésnél is, és mindkétszer újra ki van számolva. A matematikai gondolkodásmód szerint ugyan igaz hogy mindkét esetben a 3. fibonacci szám értékére van szükség, de programozásnál azt is végig kell gondolni hogy ez milyen lépésekkel fog járni.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>Összességében a ciklus mindenképp könnyebben használható ha sok változóra van szükség a kód belsejében<del class="diffchange diffchange-inline">, beleértve ha </del>egy táblázatot töltünk fel<del class="diffchange diffchange-inline">, és annak </del>a <del class="diffchange diffchange-inline">régebbi elemeiről van szó. </del>Olyan esetben is érdemesebb használni mint <del class="diffchange diffchange-inline">a </del>rekurziót, amikor a rekurzió mélysége (hány példánya fut a függvénynek egyszerre) nagyon megnőhetne, mert az a hatékonyságot csökkenti nagy <del class="diffchange diffchange-inline">memódiaigényével</del>.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>Összességében a ciklus mindenképp könnyebben használható ha<ins class="diffchange diffchange-inline">:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">* </ins>sok változóra van szükség a kód belsejében</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">* </ins>egy táblázatot töltünk fel</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">* </ins>a <ins class="diffchange diffchange-inline">ciklus sok egymástól független elemmel dolgozik</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>Olyan esetben is érdemesebb <ins class="diffchange diffchange-inline">ciklust </ins>használni mint rekurziót, amikor a rekurzió mélysége (hány példánya fut a függvénynek egyszerre) nagyon megnőhetne, mert az a hatékonyságot csökkenti nagy <ins class="diffchange diffchange-inline">memóriaigényével</ins>.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Rekurzió előnyei==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Rekurzió előnyei==</div></td></tr>
<tr><td colspan="2" class="diff-lineno">83. sor:</td>
<td colspan="2" class="diff-lineno">79. sor:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>[http://pythontutor.com/visualize.html#code=def+osztosor_ciklus(k)%3A%0A++++l+%3D+%5Bk,+1%5D%0A++++while+1%3A%0A++++++++%23+Kiirjuk+az+uj+osztosort%0A++++++++print+l%0A++++++++while+len(l)+%3E+1%3A%0A++++++++++++%23+Noveljuk+az+utolso+elemet%0A++++++++++++l%5B-1%5D+%3D+l%5B-1%5D+%2B+1%0A++++++++++++%23+Ha+az+utolso+elem+megegyezik+az%0A++++++++++++%23+utolso+elottivel,+vissza+kell+lepnunk,%0A++++++++++++%23+roviditeni+a+listat%0A++++++++++++if+l%5B-1%5D+%3D%3D+l%5B-2%5D%3A%0A++++++++++++++++del+l%5B-1%5D%0A++++++++++++%23+Ha+az+utolso+elem+az+utolso+elotti%0A++++++++++++%23+osztoja,+a+vegere+1-est+teve+uj%0A++++++++++++%23+osztosort+talaltunk%0A++++++++++++elif+l%5B-2%5D+%25+l%5B-1%5D+%3D%3D+0%3A%0A++++++++++++++++l.append(1)%0A++++++++++++++++break%0A++++++++%23+Amikor+a+lista+1+elemure+rovidult,+mindent%0A++++++++%23+megtalaltunk.%0A++++++++else%3A%0A++++++++++++return%0A%0Aosztosor_ciklus(12)&mode=display&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0 link]</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>[http://pythontutor.com/visualize.html#code=def+osztosor_ciklus(k)%3A%0A++++l+%3D+%5Bk,+1%5D%0A++++while+1%3A%0A++++++++%23+Kiirjuk+az+uj+osztosort%0A++++++++print+l%0A++++++++while+len(l)+%3E+1%3A%0A++++++++++++%23+Noveljuk+az+utolso+elemet%0A++++++++++++l%5B-1%5D+%3D+l%5B-1%5D+%2B+1%0A++++++++++++%23+Ha+az+utolso+elem+megegyezik+az%0A++++++++++++%23+utolso+elottivel,+vissza+kell+lepnunk,%0A++++++++++++%23+roviditeni+a+listat%0A++++++++++++if+l%5B-1%5D+%3D%3D+l%5B-2%5D%3A%0A++++++++++++++++del+l%5B-1%5D%0A++++++++++++%23+Ha+az+utolso+elem+az+utolso+elotti%0A++++++++++++%23+osztoja,+a+vegere+1-est+teve+uj%0A++++++++++++%23+osztosort+talaltunk%0A++++++++++++elif+l%5B-2%5D+%25+l%5B-1%5D+%3D%3D+0%3A%0A++++++++++++++++l.append(1)%0A++++++++++++++++break%0A++++++++%23+Amikor+a+lista+1+elemure+rovidult,+mindent%0A++++++++%23+megtalaltunk.%0A++++++++else%3A%0A++++++++++++return%0A%0Aosztosor_ciklus(12)&mode=display&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0 link]</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>Ez a legegyszerűbb kód amit sikerült írnom, és még így is a kommentekkel együtt sem vagyok benne teljesen biztos hogy jól érthető.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>Ez a legegyszerűbb kód amit sikerült írnom, és még így is a kommentekkel együtt sem vagyok benne teljesen biztos hogy jól érthető<ins class="diffchange diffchange-inline">. Itt van kommentek nélkül is, hogy látható legyen hogy mennyivel hosszabb és bonyolultabb:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline"><python>def osztosor_ciklus(k):</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">    l = [k, 1]</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">    while 1:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">        print l</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">        while len(l) > 1:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">            l[-1] = l[-1] + 1</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">            if l[-1] == l[-2]:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">                del l[-1]</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">            elif l[-2] % l[-1] == 0:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">                l.append(1)</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">                break</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">        else:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">            return</python></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">Ez egy olyan feladat, amire a rekurzió alkalmasabb. Amikor ciklussal csináljuk meg ugyanazt, akkor is vigyáznunk kell, hogy a lista hányadik eleménél éppen hol tartunk, mikor kell előre illetve visszalépnünk a listában. Ezek a rekurzív változatban a függvény hívásának és visszatérésének felelnek meg, így bizonyos mértékig "automatikusan" vannak kezelve</ins>.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>De amit igazán fontos megérteni, hogy '''továbbra is a ciklusos kód a hatékonyabb'''. A rekurzív kód ugyan rövidebb, és a Python Tutor szerint kevesebb lépésből áll, de:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>De amit igazán fontos megérteni, hogy '''továbbra is a ciklusos kód a hatékonyabb'''. A rekurzív kód ugyan rövidebb, és a Python Tutor szerint kevesebb lépésből áll, de:</div></td></tr>
<tr><td colspan="2" class="diff-lineno">96. sor:</td>
<td colspan="2" class="diff-lineno">108. sor:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>* Gráfok bejárása.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>* Gráfok bejárása.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>* Más olyan feladat, ahol a rekurzív változat egy ciklusban hívja önmagát.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>* Más olyan feladat, ahol a rekurzív változat egy ciklusban hívja önmagát.</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>* Olyan táblázatok kitöltése, ahol a táblázatnak végül csak néhány eleme számít.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>* Olyan táblázatok kitöltése, ahol a táblázatnak végül csak néhány eleme számít<ins class="diffchange diffchange-inline">. Ilyenkor úgynevezett letárolásos rekurziót használunk</ins>.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>* Olyan problémáknál, ahol a kimenet maga rekurzív jellegű. Ilyen példa az osztósoros feladat, vagy fraktálok kirajzolása, különféle természetes folyamatok szimulációja.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>* Olyan problémáknál, ahol a kimenet maga rekurzív jellegű. Ilyen példa az osztósoros feladat, vagy fraktálok kirajzolása, különféle természetes folyamatok szimulációja.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Nézünk majd példákat a gyakorlaton.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Nézünk majd példákat a gyakorlaton.</div></td></tr>
</table>Csirkehttp://wiki.math.bme.hu/index.php?title=Informatika2-2015/Eloadas_2_Python-2_Rekurzio_es_Ciklus&diff=10442&oldid=prevCsirke, 2015. február 17., 19:36-n2015-02-17T19:36:52Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">←Régebbi változat</td>
<td colspan='2' style="background-color: white; color:black;">A lap 2015. február 17., 19:36-kori változata</td>
</tr><tr><td colspan="2" class="diff-lineno">19. sor:</td>
<td colspan="2" class="diff-lineno">19. sor:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div><wikiframe width="800" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+negyzet(k)%3A%0A++++return+k*k%0A%0Adef+negyzetel(l)%3A%0A++++for+i+in+range(len(l))%3A%0A++++++++l%5Bi%5D+%3D+negyzet(l%5Bi%5D)%0A++++return+l%0A++++%0Aszamok+%3D+%5B2,+3,+4%5D%0Aprint+negyzetel(szamok)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=350&codeDivHeight=400"/></div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div><wikiframe width="800" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+negyzet(k)%3A%0A++++return+k*k%0A%0Adef+negyzetel(l)%3A%0A++++for+i+in+range(len(l))%3A%0A++++++++l%5Bi%5D+%3D+negyzet(l%5Bi%5D)%0A++++return+l%0A++++%0Aszamok+%3D+%5B2,+3,+4%5D%0Aprint+negyzetel(szamok)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=350&codeDivHeight=400"/></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">[http://pythontutor.com/visualize.html#code=def+negyzet(k)%3A%0A++++return+k*k%0A%0Adef+negyzetel(l)%3A%0A++++for+i+in+range(len(l))%3A%0A++++++++l%5Bi%5D+%3D+negyzet(l%5Bi%5D)%0A++++return+l%0A++++%0Aszamok+%3D+%5B2,+3,+4%5D%0Aprint+negyzetel(szamok)&mode=display&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0 link]</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Amit érdemes megfigyelni, hogy amikor a <code>negyzetel()</code> függvény meghívja a <code>negyzet()</code> függvényt (pl. Step 8-nál), amíg a <code>negyzet()</code> fut, a <code>negyzetel()</code> még nem ért véget, csak fel lett függesztve azon a ponton, ahol vár a <code>negyzet()</code> visszatérési értékére, majd onnan folytatódik.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Amit érdemes megfigyelni, hogy amikor a <code>negyzetel()</code> függvény meghívja a <code>negyzet()</code> függvényt (pl. Step 8-nál), amíg a <code>negyzet()</code> fut, a <code>negyzetel()</code> még nem ért véget, csak fel lett függesztve azon a ponton, ahol vár a <code>negyzet()</code> visszatérési értékére, majd onnan folytatódik.</div></td></tr>
<tr><td colspan="2" class="diff-lineno">28. sor:</td>
<td colspan="2" class="diff-lineno">29. sor:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div><wikiframe  width="800" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+fakt_ciklus(n)%3A%0A++++fakt+%3D+1%0A++++i+%3D+1%0A++++while+i+%3C%3D+n%3A%0A++++++++fakt+%3D+i+*+fakt%0A++++++++i+%3D+i+%2B+1%0A++++return+fakt%0A%0Aprint+fakt_ciklus(5)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=350&codeDivHeight=400"/></div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div><wikiframe  width="800" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+fakt_ciklus(n)%3A%0A++++fakt+%3D+1%0A++++i+%3D+1%0A++++while+i+%3C%3D+n%3A%0A++++++++fakt+%3D+i+*+fakt%0A++++++++i+%3D+i+%2B+1%0A++++return+fakt%0A%0Aprint+fakt_ciklus(5)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=350&codeDivHeight=400"/></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">[http://pythontutor.com/visualize.html#code=def+fakt_ciklus(n)%3A%0A++++fakt+%3D+1%0A++++i+%3D+1%0A++++while+i+%3C%3D+n%3A%0A++++++++fakt+%3D+i+*+fakt%0A++++++++i+%3D+i+%2B+1%0A++++return+fakt%0A%0Aprint+fakt_ciklus(5)&mode=display&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0 link]</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>A ciklus kódjának végére érve bizonyos feltétel mellett visszaugrunk a ciklus kódjának elejére, de bizonyos elérhető változók értéke megváltozott.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>A ciklus kódjának végére érve bizonyos feltétel mellett visszaugrunk a ciklus kódjának elejére, de bizonyos elérhető változók értéke megváltozott.</div></td></tr>
<tr><td colspan="2" class="diff-lineno">34. sor:</td>
<td colspan="2" class="diff-lineno">36. sor:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div><wikiframe width="900" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+fakt_rekurziv(n)%3A%0A++++if+n+%3D%3D+1%3A%0A++++++++return+1%0A++++else%3A%0A++++++++return+n+*+fakt_rekurziv(n-1)%0A%0Aprint+fakt_rekurziv(5)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=450&codeDivHeight=400"/></div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div><wikiframe width="900" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+fakt_rekurziv(n)%3A%0A++++if+n+%3D%3D+1%3A%0A++++++++return+1%0A++++else%3A%0A++++++++return+n+*+fakt_rekurziv(n-1)%0A%0Aprint+fakt_rekurziv(5)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=450&codeDivHeight=400"/></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">[http://pythontutor.com/visualize.html#code=def+fakt_rekurziv(n)%3A%0A++++if+n+%3D%3D+1%3A%0A++++++++return+1%0A++++else%3A%0A++++++++return+n+*+fakt_rekurziv(n-1)%0A%0Aprint+fakt_rekurziv(5)&mode=display&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0 link]</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Ebben az esetben a függvény végén bizonyos feltétel mellett visszaugrom a függvény kódjának elejére (meghívom a függvényt), de bizonyos elérhető változók (a függvény paraméterei) értéke megváltozott.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Ebben az esetben a függvény végén bizonyos feltétel mellett visszaugrom a függvény kódjának elejére (meghívom a függvényt), de bizonyos elérhető változók (a függvény paraméterei) értéke megváltozott.</div></td></tr>
<tr><td colspan="2" class="diff-lineno">46. sor:</td>
<td colspan="2" class="diff-lineno">49. sor:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div><wikiframe width="800" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+szorzotabla_ciklus(a,+b)%3A%0A++++for+i+in+range(1,+a%2B1)%3A%0A++++++++for+j+in+range(1,+b%2B1)%3A%0A++++++++++++print+i*j,%0A++++++++print%0A++++++++%0Aszorzotabla_ciklus(3,+4)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=350&codeDivHeight=400"/></div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div><wikiframe width="800" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+szorzotabla_ciklus(a,+b)%3A%0A++++for+i+in+range(1,+a%2B1)%3A%0A++++++++for+j+in+range(1,+b%2B1)%3A%0A++++++++++++print+i*j,%0A++++++++print%0A++++++++%0Aszorzotabla_ciklus(3,+4)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=350&codeDivHeight=400"/></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">[http://pythontutor.com/visualize.html#code=def+szorzotabla_ciklus(a,+b)%3A%0A++++for+i+in+range(1,+a%2B1)%3A%0A++++++++for+j+in+range(1,+b%2B1)%3A%0A++++++++++++print+i*j,%0A++++++++print%0A++++++++%0Aszorzotabla_ciklus(3,+4)&mode=display&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0 link]</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Ha ennek próbáljuk az analógiáját megcsinálni rekurzívan, meg lehet, de bonyolult kódot kapunk:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Ha ennek próbáljuk az analógiáját megcsinálni rekurzívan, meg lehet, de bonyolult kódot kapunk:</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div><wikiframe width="1000" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+szorzotabla_rekurziv_belso(i,+j,+a,+b)%3A%0A++++print+i*j,%0A++++if+j+%3C+b%3A%0A++++++++szorzotabla_rekurziv_belso(i,+j%2B1,+a,+b)%0A++++elif+i+%3C+a%3A%0A++++++++print%0A++++++++szorzotabla_rekurziv_belso(i%2B1,+1,+a,+b)%0A%0Adef+szorzotabla_rekurziv(a,+b)%3A%0A++++szorzotabla_rekurziv_belso(1,+1,+a,+b)%0A++++++++%0Aszorzotabla_rekurziv(3,+4)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=600&codeDivHeight=400"/></div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div><wikiframe width="1000" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+szorzotabla_rekurziv_belso(i,+j,+a,+b)%3A%0A++++print+i*j,%0A++++if+j+%3C+b%3A%0A++++++++szorzotabla_rekurziv_belso(i,+j%2B1,+a,+b)%0A++++elif+i+%3C+a%3A%0A++++++++print%0A++++++++szorzotabla_rekurziv_belso(i%2B1,+1,+a,+b)%0A%0Adef+szorzotabla_rekurziv(a,+b)%3A%0A++++szorzotabla_rekurziv_belso(1,+1,+a,+b)%0A++++++++%0Aszorzotabla_rekurziv(3,+4)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=600&codeDivHeight=400"/></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">[http://pythontutor.com/visualize.html#code=def+szorzotabla_rekurziv_belso(i,+j,+a,+b)%3A%0A++++print+i*j,%0A++++if+j+%3C+b%3A%0A++++++++szorzotabla_rekurziv_belso(i,+j%2B1,+a,+b)%0A++++elif+i+%3C+a%3A%0A++++++++print%0A++++++++szorzotabla_rekurziv_belso(i%2B1,+1,+a,+b)%0A%0Adef+szorzotabla_rekurziv(a,+b)%3A%0A++++szorzotabla_rekurziv_belso(1,+1,+a,+b)%0A++++++++%0Aszorzotabla_rekurziv(3,+4)&mode=display&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0 link]</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Egy másik hátrány amit valamennyire mutat az előző kódrészlet, hogy ilyenkor a végére a függvény összes változata egyszerre fut. Ez nem minden programozási nyelven, és nem mindig igaz, de ha igen, akkor jelentősen több memóriát foglal ez a változat, mint a ciklussal megírt változat.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Egy másik hátrány amit valamennyire mutat az előző kódrészlet, hogy ilyenkor a végére a függvény összes változata egyszerre fut. Ez nem minden programozási nyelven, és nem mindig igaz, de ha igen, akkor jelentősen több memóriát foglal ez a változat, mint a ciklussal megírt változat.</div></td></tr>
<tr><td colspan="2" class="diff-lineno">56. sor:</td>
<td colspan="2" class="diff-lineno">61. sor:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div><wikiframe width="1000" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+fibonacci_rekurziv(n)%3A%0A++++if+n+%3D%3D+1%3A%0A++++++++return+1%0A++++elif+n+%3D%3D+2%3A%0A++++++++return+1%0A++++else%3A%0A++++++++return+(fibonacci_rekurziv(n-1)+%2B%0A++++++++++++fibonacci_rekurziv(n-2))%0A%0Aprint+fibonacci_rekurziv(5)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=550&codeDivHeight=400"/></div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div><wikiframe width="1000" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+fibonacci_rekurziv(n)%3A%0A++++if+n+%3D%3D+1%3A%0A++++++++return+1%0A++++elif+n+%3D%3D+2%3A%0A++++++++return+1%0A++++else%3A%0A++++++++return+(fibonacci_rekurziv(n-1)+%2B%0A++++++++++++fibonacci_rekurziv(n-2))%0A%0Aprint+fibonacci_rekurziv(5)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=550&codeDivHeight=400"/></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">[http://pythontutor.com/visualize.html#code=def+fibonacci_rekurziv(n)%3A%0A++++if+n+%3D%3D+1%3A%0A++++++++return+1%0A++++elif+n+%3D%3D+2%3A%0A++++++++return+1%0A++++else%3A%0A++++++++return+(fibonacci_rekurziv(n-1)+%2B%0A++++++++++++fibonacci_rekurziv(n-2))%0A%0Aprint+fibonacci_rekurziv(5)&mode=display&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0 link]</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Végigléptetve, a <code>fibonacci_rekurziv(3)</code> meg van hívva a 11-es és a 34-es lépésnél is, és mindkétszer újra ki van számolva. A matematikai gondolkodásmód szerint ugyan igaz hogy mindkét esetben a 3. fibonacci szám értékére van szükség, de programozásnál azt is végig kell gondolni hogy ez milyen lépésekkel fog járni.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Végigléptetve, a <code>fibonacci_rekurziv(3)</code> meg van hívva a 11-es és a 34-es lépésnél is, és mindkétszer újra ki van számolva. A matematikai gondolkodásmód szerint ugyan igaz hogy mindkét esetben a 3. fibonacci szám értékére van szükség, de programozásnál azt is végig kell gondolni hogy ez milyen lépésekkel fog járni.</div></td></tr>
<tr><td colspan="2" class="diff-lineno">70. sor:</td>
<td colspan="2" class="diff-lineno">76. sor:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div><wikiframe width="1150" height="650" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+osztosor_rekurziv_belso(k,+l)%3A%0A++++print+l+%2B+%5B1%5D%0A++++for+i+in+range(2,+k)%3A%0A++++++++if+k+%25+i+%3D%3D+0%3A%0A++++++++++++osztosor_rekurziv_belso(i,+l+%2B+%5Bi%5D)%0A%0Adef+osztosor_rekurziv(k)%3A%0A++++osztosor_rekurziv_belso(k,+%5Bk%5D)%0A%0Aosztosor_rekurziv(12)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=550&codeDivHeight=400"/></div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div><wikiframe width="1150" height="650" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+osztosor_rekurziv_belso(k,+l)%3A%0A++++print+l+%2B+%5B1%5D%0A++++for+i+in+range(2,+k)%3A%0A++++++++if+k+%25+i+%3D%3D+0%3A%0A++++++++++++osztosor_rekurziv_belso(i,+l+%2B+%5Bi%5D)%0A%0Adef+osztosor_rekurziv(k)%3A%0A++++osztosor_rekurziv_belso(k,+%5Bk%5D)%0A%0Aosztosor_rekurziv(12)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=550&codeDivHeight=400"/></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">[http://pythontutor.com/visualize.html#code=def+osztosor_rekurziv_belso(k,+l)%3A%0A++++print+l+%2B+%5B1%5D%0A++++for+i+in+range(2,+k)%3A%0A++++++++if+k+%25+i+%3D%3D+0%3A%0A++++++++++++osztosor_rekurziv_belso(i,+l+%2B+%5Bi%5D)%0A%0Adef+osztosor_rekurziv(k)%3A%0A++++osztosor_rekurziv_belso(k,+%5Bk%5D)%0A%0Aosztosor_rekurziv(12)&mode=display&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0 link]</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Próbáljuk meg ugyanezt a megoldást reprodukálni ciklussal. Itt egy ilyen megoldás:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Próbáljuk meg ugyanezt a megoldást reprodukálni ciklussal. Itt egy ilyen megoldás:</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div><wikiframe width="1150" height="1000" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+osztosor_ciklus(k)%3A%0A++++l+%3D+%5Bk,+1%5D%0A++++while+1%3A%0A++++++++%23+Kiirjuk+az+uj+osztosort%0A++++++++print+l%0A++++++++while+len(l)+%3E+1%3A%0A++++++++++++%23+Noveljuk+az+utolso+elemet%0A++++++++++++l%5B-1%5D+%3D+l%5B-1%5D+%2B+1%0A++++++++++++%23+Ha+az+utolso+elem+megegyezik+az%0A++++++++++++%23+utolso+elottivel,+vissza+kell+lepnunk,%0A++++++++++++%23+roviditeni+a+listat%0A++++++++++++if+l%5B-1%5D+%3D%3D+l%5B-2%5D%3A%0A++++++++++++++++del+l%5B-1%5D%0A++++++++++++%23+Ha+az+utolso+elem+az+utolso+elotti%0A++++++++++++%23+osztoja,+a+vegere+1-est+teve+uj%0A++++++++++++%23+osztosort+talaltunk%0A++++++++++++elif+l%5B-2%5D+%25+l%5B-1%5D+%3D%3D+0%3A%0A++++++++++++++++l.append(1)%0A++++++++++++++++break%0A++++++++%23+Amikor+a+lista+1+elemure+rovidult,+mindent%0A++++++++%23+megtalaltunk.%0A++++++++else%3A%0A++++++++++++return%0A%0Aosztosor_ciklus(12)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=580&codeDivHeight=650"/></div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div><wikiframe width="1150" height="1000" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+osztosor_ciklus(k)%3A%0A++++l+%3D+%5Bk,+1%5D%0A++++while+1%3A%0A++++++++%23+Kiirjuk+az+uj+osztosort%0A++++++++print+l%0A++++++++while+len(l)+%3E+1%3A%0A++++++++++++%23+Noveljuk+az+utolso+elemet%0A++++++++++++l%5B-1%5D+%3D+l%5B-1%5D+%2B+1%0A++++++++++++%23+Ha+az+utolso+elem+megegyezik+az%0A++++++++++++%23+utolso+elottivel,+vissza+kell+lepnunk,%0A++++++++++++%23+roviditeni+a+listat%0A++++++++++++if+l%5B-1%5D+%3D%3D+l%5B-2%5D%3A%0A++++++++++++++++del+l%5B-1%5D%0A++++++++++++%23+Ha+az+utolso+elem+az+utolso+elotti%0A++++++++++++%23+osztoja,+a+vegere+1-est+teve+uj%0A++++++++++++%23+osztosort+talaltunk%0A++++++++++++elif+l%5B-2%5D+%25+l%5B-1%5D+%3D%3D+0%3A%0A++++++++++++++++l.append(1)%0A++++++++++++++++break%0A++++++++%23+Amikor+a+lista+1+elemure+rovidult,+mindent%0A++++++++%23+megtalaltunk.%0A++++++++else%3A%0A++++++++++++return%0A%0Aosztosor_ciklus(12)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=580&codeDivHeight=650"/></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">[http://pythontutor.com/visualize.html#code=def+osztosor_ciklus(k)%3A%0A++++l+%3D+%5Bk,+1%5D%0A++++while+1%3A%0A++++++++%23+Kiirjuk+az+uj+osztosort%0A++++++++print+l%0A++++++++while+len(l)+%3E+1%3A%0A++++++++++++%23+Noveljuk+az+utolso+elemet%0A++++++++++++l%5B-1%5D+%3D+l%5B-1%5D+%2B+1%0A++++++++++++%23+Ha+az+utolso+elem+megegyezik+az%0A++++++++++++%23+utolso+elottivel,+vissza+kell+lepnunk,%0A++++++++++++%23+roviditeni+a+listat%0A++++++++++++if+l%5B-1%5D+%3D%3D+l%5B-2%5D%3A%0A++++++++++++++++del+l%5B-1%5D%0A++++++++++++%23+Ha+az+utolso+elem+az+utolso+elotti%0A++++++++++++%23+osztoja,+a+vegere+1-est+teve+uj%0A++++++++++++%23+osztosort+talaltunk%0A++++++++++++elif+l%5B-2%5D+%25+l%5B-1%5D+%3D%3D+0%3A%0A++++++++++++++++l.append(1)%0A++++++++++++++++break%0A++++++++%23+Amikor+a+lista+1+elemure+rovidult,+mindent%0A++++++++%23+megtalaltunk.%0A++++++++else%3A%0A++++++++++++return%0A%0Aosztosor_ciklus(12)&mode=display&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0 link]</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Ez a legegyszerűbb kód amit sikerült írnom, és még így is a kommentekkel együtt sem vagyok benne teljesen biztos hogy jól érthető.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Ez a legegyszerűbb kód amit sikerült írnom, és még így is a kommentekkel együtt sem vagyok benne teljesen biztos hogy jól érthető.</div></td></tr>
</table>Csirkehttp://wiki.math.bme.hu/index.php?title=Informatika2-2015/Eloadas_2_Python-2_Rekurzio_es_Ciklus&diff=10424&oldid=prevCsirke: Informatika2-2015/Eloadas 1 Python-1 Rekurzio es Ciklus lapot átneveztem Informatika2-2015/Eloadas 2 Python-2 Rekurzio es Ciklus névre2015-02-11T10:28:44Z<p><a href="/view/Informatika2-2015/Eloadas_1_Python-1_Rekurzio_es_Ciklus" class="mw-redirect" title="Informatika2-2015/Eloadas 1 Python-1 Rekurzio es Ciklus">Informatika2-2015/Eloadas 1 Python-1 Rekurzio es Ciklus</a> lapot átneveztem <a href="/view/Informatika2-2015/Eloadas_2_Python-2_Rekurzio_es_Ciklus" title="Informatika2-2015/Eloadas 2 Python-2 Rekurzio es Ciklus">Informatika2-2015/Eloadas 2 Python-2 Rekurzio es Ciklus</a> névre</p>
<table class='diff diff-contentalign-left'>
<tr valign='top'>
<td colspan='1' style="background-color: white; color:black;">←Régebbi változat</td>
<td colspan='1' style="background-color: white; color:black;">A lap 2015. február 11., 10:28-kori változata</td>
</tr></table>Csirkehttp://wiki.math.bme.hu/index.php?title=Informatika2-2015/Eloadas_2_Python-2_Rekurzio_es_Ciklus&diff=10402&oldid=prevCsirke, 2015. február 8., 03:47-n2015-02-08T03:47:09Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">←Régebbi változat</td>
<td colspan='2' style="background-color: white; color:black;">A lap 2015. február 8., 03:47-kori változata</td>
</tr><tr><td colspan="2" class="diff-lineno">87. sor:</td>
<td colspan="2" class="diff-lineno">87. sor:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Milyen esetben érdemes tehát rekurziót használni? Amikor érthetőbb kódot ad, és a hatékonyság vesztés nem jelentős, vagy nem számít. Néhány példa:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Milyen esetben érdemes tehát rekurziót használni? Amikor érthetőbb kódot ad, és a hatékonyság vesztés nem jelentős, vagy nem számít. Néhány példa:</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>* Gráfok bejárása.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>* Gráfok bejárása.</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">* Más olyan feladat, ahol a rekurzív változat egy ciklusban hívja önmagát.</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>* Olyan táblázatok kitöltése, ahol a táblázatnak végül csak néhány eleme számít.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>* Olyan táblázatok kitöltése, ahol a táblázatnak végül csak néhány eleme számít.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>* Olyan problémáknál, ahol a kimenet maga rekurzív jellegű. Ilyen példa az osztósoros feladat, vagy fraktálok kirajzolása, különféle természetes folyamatok szimulációja.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>* Olyan problémáknál, ahol a kimenet maga rekurzív jellegű. Ilyen példa az osztósoros feladat, vagy fraktálok kirajzolása, különféle természetes folyamatok szimulációja.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Nézünk majd példákat a gyakorlaton.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Nézünk majd példákat a gyakorlaton.</div></td></tr>
</table>Csirkehttp://wiki.math.bme.hu/index.php?title=Informatika2-2015/Eloadas_2_Python-2_Rekurzio_es_Ciklus&diff=10399&oldid=prevCsirke, 2015. február 4., 11:36-n2015-02-04T11:36:10Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">←Régebbi változat</td>
<td colspan='2' style="background-color: white; color:black;">A lap 2015. február 4., 11:36-kori változata</td>
</tr><tr><td colspan="2" class="diff-lineno">62. sor:</td>
<td colspan="2" class="diff-lineno">62. sor:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Rekurzió előnyei==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Rekurzió előnyei==</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Tekintsük a következő feladatot:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">'''Egy ''k'' szám osztósora egy olyan pozitív egészekből álló számsor, ami ''k''-val kezdődik, 1-el végződik, és a következő szám mindig az előző osztója. Pl. a 24, 12, 3, 1 az a 24 egy osztósora. Írjunk egy függvényt ami kiírja egy szám összes osztósorát.'''</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Egy lehetséges megoldás rekurzióval:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"><wikiframe width="1150" height="650" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+osztosor_rekurziv_belso(k,+l)%3A%0A++++print+l+%2B+%5B1%5D%0A++++for+i+in+range(2,+k)%3A%0A++++++++if+k+%25+i+%3D%3D+0%3A%0A++++++++++++osztosor_rekurziv_belso(i,+l+%2B+%5Bi%5D)%0A%0Adef+osztosor_rekurziv(k)%3A%0A++++osztosor_rekurziv_belso(k,+%5Bk%5D)%0A%0Aosztosor_rekurziv(12)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=550&codeDivHeight=400"/></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Próbáljuk meg ugyanezt a megoldást reprodukálni ciklussal. Itt egy ilyen megoldás:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"><wikiframe width="1150" height="1000" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+osztosor_ciklus(k)%3A%0A++++l+%3D+%5Bk,+1%5D%0A++++while+1%3A%0A++++++++%23+Kiirjuk+az+uj+osztosort%0A++++++++print+l%0A++++++++while+len(l)+%3E+1%3A%0A++++++++++++%23+Noveljuk+az+utolso+elemet%0A++++++++++++l%5B-1%5D+%3D+l%5B-1%5D+%2B+1%0A++++++++++++%23+Ha+az+utolso+elem+megegyezik+az%0A++++++++++++%23+utolso+elottivel,+vissza+kell+lepnunk,%0A++++++++++++%23+roviditeni+a+listat%0A++++++++++++if+l%5B-1%5D+%3D%3D+l%5B-2%5D%3A%0A++++++++++++++++del+l%5B-1%5D%0A++++++++++++%23+Ha+az+utolso+elem+az+utolso+elotti%0A++++++++++++%23+osztoja,+a+vegere+1-est+teve+uj%0A++++++++++++%23+osztosort+talaltunk%0A++++++++++++elif+l%5B-2%5D+%25+l%5B-1%5D+%3D%3D+0%3A%0A++++++++++++++++l.append(1)%0A++++++++++++++++break%0A++++++++%23+Amikor+a+lista+1+elemure+rovidult,+mindent%0A++++++++%23+megtalaltunk.%0A++++++++else%3A%0A++++++++++++return%0A%0Aosztosor_ciklus(12)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=580&codeDivHeight=650"/></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Ez a legegyszerűbb kód amit sikerült írnom, és még így is a kommentekkel együtt sem vagyok benne teljesen biztos hogy jól érthető.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">De amit igazán fontos megérteni, hogy '''továbbra is a ciklusos kód a hatékonyabb'''. A rekurzív kód ugyan rövidebb, és a Python Tutor szerint kevesebb lépésből áll, de:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">* Egyszerre a félig kész listának több másolata létezik a függvény több futó példányában.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">* Maga a függvény több egyszerre futó példánya is memóriát fogyaszt, csökkenti a hatékonyságot.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Azonban ebben az esetben ez a felesleges munka nem lesz sokszorosa a szükséges munkának nagyobb esetekre se. Például úgyis a lista minden példányát ki kellett írni, azoknak mind létezni kell a függvény futása után, tehát az hogy menet közben több példány is létezik, az nem sokszorozza a memória igényt.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Viszont, a rekurzív kód könnyebben olvasható, és a működése könnyebben megérthető. Ez nem elvetendő szempont, mindenki a programozóként dolgozik, '''több időt tölt kód olvasásával, mint írásával'''.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Milyen esetben érdemes tehát rekurziót használni? Amikor érthetőbb kódot ad, és a hatékonyság vesztés nem jelentős, vagy nem számít. Néhány példa:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">* Gráfok bejárása.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">* Olyan táblázatok kitöltése, ahol a táblázatnak végül csak néhány eleme számít.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">* Olyan problémáknál, ahol a kimenet maga rekurzív jellegű. Ilyen példa az osztósoros feladat, vagy fraktálok kirajzolása, különféle természetes folyamatok szimulációja.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Nézünk majd példákat a gyakorlaton.</ins></div></td></tr>
</table>Csirkehttp://wiki.math.bme.hu/index.php?title=Informatika2-2015/Eloadas_2_Python-2_Rekurzio_es_Ciklus&diff=10398&oldid=prevCsirke, 2015. február 4., 10:31-n2015-02-04T10:31:07Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">←Régebbi változat</td>
<td colspan='2' style="background-color: white; color:black;">A lap 2015. február 4., 10:31-kori változata</td>
</tr><tr><td colspan="2" class="diff-lineno">11. sor:</td>
<td colspan="2" class="diff-lineno">11. sor:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Mai órán még kb. elég az [[Informatika1-2014/eloadas3|eloadas3]] anyaga, ami kell az függvények definiálása, elágazások.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Mai órán még kb. elég az [[Informatika1-2014/eloadas3|eloadas3]] anyaga, ami kell az függvények definiálása, elágazások.</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">A Python nagyon népszerű nyelv, többek között jól átlátható szintaxisa miatt, és mivel viszonylag könnyű új platformokra is átültetni. Ennek köszönhető, hogy rengeteg eszköz és erőforrás elérhető hozzá az interneten. Csak egy példa a http://pythontutor.com, amit itt az előadás lapjain is használunk a kód részletes bemutatásához, de ti is használhatjátok saját teszteléshez.</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Függvényhívás példa==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Függvényhívás példa==</div></td></tr>
<tr><td colspan="2" class="diff-lineno">31. sor:</td>
<td colspan="2" class="diff-lineno">33. sor:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>'''Rekurzió:'''</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>'''Rekurzió:'''</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><wikiframe width="<del class="diffchange diffchange-inline">800</del>" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+fakt_rekurziv(n)%3A%0A++++if+n+%3D%3D+1%3A%0A++++++++return+1%0A++++else%3A%0A++++++++return+n+*+fakt_rekurziv(n-1)%0A%0Aprint+fakt_rekurziv(5)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=<del class="diffchange diffchange-inline">350</del>&codeDivHeight=400"/></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><wikiframe width="<ins class="diffchange diffchange-inline">900</ins>" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+fakt_rekurziv(n)%3A%0A++++if+n+%3D%3D+1%3A%0A++++++++return+1%0A++++else%3A%0A++++++++return+n+*+fakt_rekurziv(n-1)%0A%0Aprint+fakt_rekurziv(5)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=<ins class="diffchange diffchange-inline">450</ins>&codeDivHeight=400"/></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Ebben az esetben a függvény végén bizonyos feltétel mellett visszaugrom a függvény kódjának elejére (meghívom a függvényt), de bizonyos elérhető változók (a függvény paraméterei) értéke megváltozott.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Ebben az esetben a függvény végén bizonyos feltétel mellett visszaugrom a függvény kódjának elejére (meghívom a függvényt), de bizonyos elérhető változók (a függvény paraméterei) értéke megváltozott.</div></td></tr>
<tr><td colspan="2" class="diff-lineno">38. sor:</td>
<td colspan="2" class="diff-lineno">40. sor:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Ciklus előnyei==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Ciklus előnyei==</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">A ciklus fontos előnye, hogy nem hoz egy új névteret létre: minden változó amit a függvényben használtunk, elérhető a cikluson belül is. Ezzel ellenben ha egy függvényt, akár önmagát, hívjuk, akkor ott csak azok a változók érhetőek el, amiket paraméterként átadunk.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Emiatt, ha pl. egy táblázatot akarunk kitölteni, akkor azt ciklussal nagyon egyszerű:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"><wikiframe width="800" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+szorzotabla_ciklus(a,+b)%3A%0A++++for+i+in+range(1,+a%2B1)%3A%0A++++++++for+j+in+range(1,+b%2B1)%3A%0A++++++++++++print+i*j,%0A++++++++print%0A++++++++%0Aszorzotabla_ciklus(3,+4)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=350&codeDivHeight=400"/></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Ha ennek próbáljuk az analógiáját megcsinálni rekurzívan, meg lehet, de bonyolult kódot kapunk:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"><wikiframe width="1000" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+szorzotabla_rekurziv_belso(i,+j,+a,+b)%3A%0A++++print+i*j,%0A++++if+j+%3C+b%3A%0A++++++++szorzotabla_rekurziv_belso(i,+j%2B1,+a,+b)%0A++++elif+i+%3C+a%3A%0A++++++++print%0A++++++++szorzotabla_rekurziv_belso(i%2B1,+1,+a,+b)%0A%0Adef+szorzotabla_rekurziv(a,+b)%3A%0A++++szorzotabla_rekurziv_belso(1,+1,+a,+b)%0A++++++++%0Aszorzotabla_rekurziv(3,+4)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=600&codeDivHeight=400"/></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Egy másik hátrány amit valamennyire mutat az előző kódrészlet, hogy ilyenkor a végére a függvény összes változata egyszerre fut. Ez nem minden programozási nyelven, és nem mindig igaz, de ha igen, akkor jelentősen több memóriát foglal ez a változat, mint a ciklussal megírt változat.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Mivel rekurziónál a régebben kiszámolt értékek lehet hogy nem elérhetőek, ezért a gondtalanul megírt rekurzív kód lehet hogy fölöslegesen sokat számol. Példának itt van ez a '''rosszul megírt''' változata a fibonacci számok kiszámolásának:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"><wikiframe width="1000" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+fibonacci_rekurziv(n)%3A%0A++++if+n+%3D%3D+1%3A%0A++++++++return+1%0A++++elif+n+%3D%3D+2%3A%0A++++++++return+1%0A++++else%3A%0A++++++++return+(fibonacci_rekurziv(n-1)+%2B%0A++++++++++++fibonacci_rekurziv(n-2))%0A%0Aprint+fibonacci_rekurziv(5)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=550&codeDivHeight=400"/></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Végigléptetve, a <code>fibonacci_rekurziv(3)</code> meg van hívva a 11-es és a 34-es lépésnél is, és mindkétszer újra ki van számolva. A matematikai gondolkodásmód szerint ugyan igaz hogy mindkét esetben a 3. fibonacci szám értékére van szükség, de programozásnál azt is végig kell gondolni hogy ez milyen lépésekkel fog járni.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Összességében a ciklus mindenképp könnyebben használható ha sok változóra van szükség a kód belsejében, beleértve ha egy táblázatot töltünk fel, és annak a régebbi elemeiről van szó. Olyan esetben is érdemesebb használni mint a rekurziót, amikor a rekurzió mélysége (hány példánya fut a függvénynek egyszerre) nagyon megnőhetne, mert az a hatékonyságot csökkenti nagy memódiaigényével.</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Rekurzió előnyei==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Rekurzió előnyei==</div></td></tr>
</table>Csirkehttp://wiki.math.bme.hu/index.php?title=Informatika2-2015/Eloadas_2_Python-2_Rekurzio_es_Ciklus&diff=10396&oldid=prevCsirke, 2015. február 3., 16:06-n2015-02-03T16:06:45Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">←Régebbi változat</td>
<td colspan='2' style="background-color: white; color:black;">A lap 2015. február 3., 16:06-kori változata</td>
</tr><tr><td colspan="2" class="diff-lineno">1. sor:</td>
<td colspan="2" class="diff-lineno">1. sor:</td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>Bemutatkozás<del class="diffchange diffchange-inline">:</del></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">=</ins>Bemutatkozás<ins class="diffchange diffchange-inline">=</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>* Eisenberger András</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>* Eisenberger András</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>* Hívjatok Csirkének</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>* Hívjatok Csirkének</div></td></tr>
</table>Csirkehttp://wiki.math.bme.hu/index.php?title=Informatika2-2015/Eloadas_2_Python-2_Rekurzio_es_Ciklus&diff=10395&oldid=prevCsirke: Előadás első fele2015-02-03T15:38:02Z<p>Előadás első fele</p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">←Régebbi változat</td>
<td colspan='2' style="background-color: white; color:black;">A lap 2015. február 3., 15:38-kori változata</td>
</tr><tr><td colspan="2" class="diff-lineno">1. sor:</td>
<td colspan="2" class="diff-lineno">1. sor:</td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">Bemutatkozás:</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">* Eisenberger András</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">* Hívjatok Csirkének</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">* email: [mailto:csirkeee@gmail.com csirkeee@gmail.com]</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>=Python ismétlés=</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>=Python ismétlés=</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>Aki nem 2014-ben hallgatta az Info1-et és úgy érzi lemaradása van, hivatalos (angol) Python tanító anyag: [http://docs.python.org/2.7/tutorial/ Python tutorial].</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>Aki nem 2014-ben hallgatta az Info1-et és úgy érzi lemaradása van, <ins class="diffchange diffchange-inline">azok részére elérhetőek</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">* Az előző félév előadásainak anyagai: [[Informatika1-2014/eloadas3]], [[Informatika1-2014/eloadas4]]</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">* Vagy akár a </ins>hivatalos (angol) Python tanító anyag: [http://docs.python.org/2.7/tutorial/ Python tutorial].</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">Mai órán még kb. elég az [[Informatika1-2014/eloadas3|eloadas3]] anyaga, ami kell az függvények definiálása, elágazások.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">==Függvényhívás példa==</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">Python-ban a kódban bárhol definiálható függvény a kódban, a <code>def</code> kulcsszóval. Egyelőre most arról az esetről beszélünk csak, amikor a fájl gyökerében van definiálva, nem másik függvényen belül.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline"><wikiframe width="800" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+negyzet(k)%3A%0A++++return+k*k%0A%0Adef+negyzetel(l)%3A%0A++++for+i+in+range(len(l))%3A%0A++++++++l%5Bi%5D+%3D+negyzet(l%5Bi%5D)%0A++++return+l%0A++++%0Aszamok+%3D+%5B2,+3,+4%5D%0Aprint+negyzetel(szamok)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=350&codeDivHeight=400"/></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">Amit érdemes megfigyelni, hogy amikor a <code>negyzetel()</code> függvény meghívja a <code>negyzet()</code> függvényt (pl. Step 8-nál), amíg a <code>negyzet()</code> fut, a <code>negyzetel()</code> még nem ért véget, csak fel lett függesztve azon a ponton, ahol vár a <code>negyzet()</code> visszatérési értékére, majd onnan folytatódik.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">=Ciklus vagy rekurzió=</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">==Faktoriális kiszámolása==</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">'''Ciklus:'''</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline"><wikiframe  width="800" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+fakt_ciklus(n)%3A%0A++++fakt+%3D+1%0A++++i+%3D+1%0A++++while+i+%3C%3D+n%3A%0A++++++++fakt+%3D+i+*+fakt%0A++++++++i+%3D+i+%2B+1%0A++++return+fakt%0A%0Aprint+fakt_ciklus(5)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=350&codeDivHeight=400"/></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">A ciklus kódjának végére érve bizonyos feltétel mellett visszaugrunk a ciklus kódjának elejére, de bizonyos elérhető változók értéke megváltozott.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">'''Rekurzió:'''</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline"><wikiframe width="800" height="500" frameborder="1" src="http://pythontutor.com/iframe-embed.html#code=def+fakt_rekurziv(n)%3A%0A++++if+n+%3D%3D+1%3A%0A++++++++return+1%0A++++else%3A%0A++++++++return+n+*+fakt_rekurziv(n-1)%0A%0Aprint+fakt_rekurziv(5)&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=350&codeDivHeight=400"/></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">Ebben az esetben a függvény végén bizonyos feltétel mellett visszaugrom a függvény kódjának elejére (meghívom a függvényt), de bizonyos elérhető változók (a függvény paraméterei) értéke megváltozott.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">Ennél a példánál láthatóak a hasonlóságok a kettő között, de mik a különbségek?</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">==Ciklus előnyei==</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">==Rekurzió előnyei==</ins></div></td></tr>
</table>Csirkehttp://wiki.math.bme.hu/index.php?title=Informatika2-2015/Eloadas_2_Python-2_Rekurzio_es_Ciklus&diff=10389&oldid=prevCsirke: Informatika2-2015/Előadás 1 Python-1 Rekurzió és Ciklus lapot átneveztem Informatika2-2015/Eloadas 1 Python-1 Rekurzio es Ciklus névre: Mégse legyen ékezet2015-02-02T11:33:31Z<p><a href="/view/Informatika2-2015/El%C5%91ad%C3%A1s_1_Python-1_Rekurzi%C3%B3_%C3%A9s_Ciklus" class="mw-redirect" title="Informatika2-2015/Előadás 1 Python-1 Rekurzió és Ciklus">Informatika2-2015/Előadás 1 Python-1 Rekurzió és Ciklus</a> lapot átneveztem <a href="/view/Informatika2-2015/Eloadas_1_Python-1_Rekurzio_es_Ciklus" class="mw-redirect" title="Informatika2-2015/Eloadas 1 Python-1 Rekurzio es Ciklus">Informatika2-2015/Eloadas 1 Python-1 Rekurzio es Ciklus</a> névre: Mégse legyen ékezet</p>
<table class='diff diff-contentalign-left'>
<tr valign='top'>
<td colspan='1' style="background-color: white; color:black;">←Régebbi változat</td>
<td colspan='1' style="background-color: white; color:black;">A lap 2015. február 2., 11:33-kori változata</td>
</tr></table>Csirke