TCH (statz) | #1, Főfasz (10466) |
2443 | #265d | ^ | Idézet | Thu, 27 Jun 2013 22:26:22 +02 |
78.92.*.* | *.catv.pool.telekom.hu |
Nézegetem a Lua nyelvet a Wikin és találtam benne egy ilyen példakódot.function factorial(n) if n == 0 then return 1 else return n * factorial(n - 1) end endHát őszintén remélem, hogy aki ezt írta, az nem gondolta komolyan...ez ugyanis n darab meghívást, azaz n darab veremműveletet, paraméterátadást és ugrást, majd visszatérést fog tartalmazni... Akkor már function factorial(n) local x = 1 for i = 2,n do x = x * i end return x endSima ciklus. Sokkal gyorsabb. Sőt. Bizonyos mérték fölött végtelenszer, mert a másik egyszerűen be fog pusztulni veremtúlcsordulással. Tesztkódnak ennyit: print(factorial(100000)) Hadd szóljon. (Persze ekkora számnak a faktoriálisa már sok lesz neki, de most nem ez a lényeg, hanem a rekurzió itteni alkalmazásának a feleslegessége.) root@Csabi:~# time lua tchfact.lua inf real 0m0.009s user 0m0.000s sys 0m0.010s root@Csabi:~# time lua wikifact.lua lua: wikifact.lua:5: stack overflow stack traceback: wikifact.lua:5: in function 'factorial' wikifact.lua:5: in function 'factorial' wikifact.lua:5: in function 'factorial' wikifact.lua:5: in function 'factorial' wikifact.lua:5: in function 'factorial' wikifact.lua:5: in function 'factorial' wikifact.lua:5: in function 'factorial' wikifact.lua:5: in function 'factorial' wikifact.lua:5: in function 'factorial' wikifact.lua:5: in function 'factorial' ... wikifact.lua:5: in function 'factorial' wikifact.lua:5: in function 'factorial' wikifact.lua:5: in function 'factorial' wikifact.lua:5: in function 'factorial' wikifact.lua:5: in function 'factorial' wikifact.lua:5: in function 'factorial' wikifact.lua:5: in function 'factorial' wikifact.lua:5: in function 'factorial' wikifact.lua:9: in main chunk [C]: ? real 0m1.111s user 0m1.100s sys 0m0.010s QED.(Hüje matematiqs0k.) Mindenesetre kicseréltem, nehogy valaki komolyan vegye. (A Wikinek egyszerre a legnagyobb előnye és hátránya, hogy mindenki beletúrhat.) |