2016-07-12 2 views
3

j'ai essayé de mettre en œuvre une fonction factoriel comme ceci:erreur de débordement de la pile tout en mettant en œuvre une fonction récursive (factoriel)

function factorial(n) 
    if (n == 0) then 
     return 1 
    else 
     return n * factorial(n - 1) 
    end 
end 

io.write("number?") 
n =io.read() 
fac = factorial(n) 
print("factorial of",n,"=",fac) 

Il fonctionne très bien jusqu'à ce que je donne 0 comme entrée. Il renvoie

lua: factorial.lua:5: stack overflow 
stack traceback: 
       factorial.lua:5: in function 'factorial' 

Qu'est-ce que je fais mal?

En outre, il donne la sortie normale seulement jusqu'à 16. quand je donne n=17, la sortie est 3.55687428096e+014

Comment le faire correctement?

+0

'n = 17' réponse est correcte. C'est juste imprimé en notation scientifique. –

+0

@JohnnyMopp oui, que faire pour obtenir juste le numéro? en représentation normale. – Nuwanda

+1

@Alaye http://stackoverflow.com/questions/1133639/how-can-i-print-a-huge-number-in-lua-without-using-scientific-notation –

Répondre

2

Pour obtenir "0" au travail, dire read lire un numéro: n = io.read("*n")

Pour obtenir la notation normale au lieu de la notation scientifique, utiliser

print("factorial of",n,"=",string.format("%0f",fac))