Un appel récursif, est un appel qui peut se répéter un nombre indéfini de fois.
Ceci peut se passer, lorsqu'une fonction appelle une autre fonction, lors de sa dernière action.
L'exemple suivant est un appel récursif.
function f(x) return g(x) -- appel récursif end
L'appel à g(x) est la dernière action de la fonction f(x), car après, il n'y a rien d'autre à faire: c'est donc bien "un appel récursif".
Dans cette situation, le programme n'aura pas besoin de revenir à la fonction d'appel, (puisqu'il n'y a rien d'autre à accomplir) et de ce fait ne conservera aucune information dans la pile.
Puisqu'un appel récursif n'utilise pas d'espace de pile, cela signifie qu'il n'y a plus de limite de 'boucle' et que la fonction ne sera jamais débordée.
Aussi, la fonction suivante boucle sans fin et sans "stack overflow"...
function f1(n) if n > 0 then return f1(n - 1) end end
Mais attention tout de même, ce qui suit n'est pas un appel récursif.
function f1(x g(x) return end
Car après l'appel à g(x), la fonction f(x) a encore une chose à faire: un return.
Avec LUA seul un appel return g(...) est un appel récursif.
Puisque que g et ses arguments peuvent-être très complexes.
Exemple: return x[i].f1(x[j] + a*b, i + j)
L'appel récursif est similaire au goto du basic, un renvoi qui ne nécessite pas de retour automatique.