Bc# Posted June 8, 2014 Share Posted June 8, 2014 Mi pregunta es sobre recursividad, para el que no sabe que es esto, es cuando se llama una función a si misma. Ejemplo: i=0 function recursiva() outputChatBox(i) i=i+1 recursiva() end Es parecido como usar un for pero en el script que estoy haciendo la manera mas optima de hacerlo era usando recursividad. Ahora mi pregunta es si llamo a la función infinitamente (como en el ejemplo) ¿Consumirá mas recursos?¿Colapsará en algún momento? Link to comment
Tomas Posted June 8, 2014 Share Posted June 8, 2014 Me parece que te dará 'stack overflow'. Link to comment
Alexs Posted June 8, 2014 Share Posted June 8, 2014 Tanto MTA como Lua abortan la ejecución de códigos "infinitos". * viewtopic.php?f=148&t=52868 Link to comment
UserToDelete Posted June 8, 2014 Share Posted June 8, 2014 En vez de incluir un infinite, incluye un timer con 50 ms, no se "petaria" el server y Lua y MTA no lo aborta i=0 function recursiva() outputChatBox(i) i=i+1 end setTimer(recursiva,50,0) Link to comment
Alexs Posted June 8, 2014 Share Posted June 8, 2014 En vez de incluir un infinite, incluye un timer con 50 ms, no se "petaria" el server y Lua y MTA no lo aborta i=0 function recursiva() outputChatBox(i) i=i+1 end setTimer(recursiva,50,0) Los temporizadores son la peor idea en MTA, sobre todo uno "infinito" con tan poco tiempo de retraso. Link to comment
Bc# Posted June 9, 2014 Author Share Posted June 9, 2014 En vez de incluir un infinite, incluye un timer con 50 ms, no se "petaria" el server y Lua y MTA no lo aborta i=0 function recursiva() outputChatBox(i) i=i+1 end setTimer(recursiva,50,0) Los temporizadores son la peor idea en MTA, sobre todo uno "infinito" con tan poco tiempo de retraso. Se supone que tengo que hacer un contador que valla variando cada 10 segundos, cuando llegue a cierto valor que vuelva a 0 y se repita el ciclo, pero en estos momentos no se me ocurre como. Link to comment
Alexs Posted June 9, 2014 Share Posted June 9, 2014 Se supone que tengo que hacer un contador que valla variando cada 10 segundos, cuando llegue a cierto valor que vuelva a 0 y se repita el ciclo, pero en estos momentos no se me ocurre como. Si puedes hacerlo en client-side, utiliza getTickCounty onClientRendery no un temporizador, en cuanto a un numero que sea alterado ciclicamente, se me ocurre algo así: local limit = 10 local i = 0 function up() i = i+1 > limit and 1 or i+1 return i end for i = 1, 50 do print( up() ) end Link to comment
Renkon Posted June 9, 2014 Share Posted June 9, 2014 Un ejempló clásico de Recursividad, el factorial 1! = 1, 2! = 2, 3! = 6, 4! = 24, 5! = 120 function factorial(n) return (n-1) >= 1 and n*factorial(n-1) or false end Es algo así, pero me explic0 Link to comment
Bc# Posted June 10, 2014 Author Share Posted June 10, 2014 Un ejempló clásico de Recursividad, el factorial1! = 1, 2! = 2, 3! = 6, 4! = 24, 5! = 120 function factorial(n) return (n-1) >= 1 and n*factorial(n-1) or false end Es algo así, pero me explic0 Lo se, es una de las cosas básicas que vi en la universidad, pero mi pregunta era en torno a lo que pasa con lua al usar recursividad. Link to comment
Recommended Posts