Bc# Posted June 8, 2014 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? Bc Media Clan XPG Foro mtasa://104.223.20.159:21003
Tomas Posted June 8, 2014 Posted June 8, 2014 Me parece que te dará 'stack overflow'. Currently developing for International Gaming Community - Join us!
Alexs Posted June 8, 2014 Posted June 8, 2014 Tanto MTA como Lua abortan la ejecución de códigos "infinitos". * viewtopic.php?f=148&t=52868 Developer @ MYVAL
UserToDelete Posted June 8, 2014 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)
Alexs Posted June 8, 2014 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. Developer @ MYVAL
Bc# Posted June 9, 2014 Author 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. Bc Media Clan XPG Foro mtasa://104.223.20.159:21003
Alexs Posted June 9, 2014 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 Developer @ MYVAL
Renkon Posted June 9, 2014 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
Bc# Posted June 10, 2014 Author 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. Bc Media Clan XPG Foro mtasa://104.223.20.159:21003
Recommended Posts