| TCH (statz) | ![]() #1, Főfasz (10579) |
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.010sQED.(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.) |