2016-07-12 7 views
3

Я попытался реализовать функцию факториала так:стек ошибка переполнения при реализации рекурсивной функции (факторный)

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) 

Он работает отлично, пока я не дам 0 в качестве входных данных. Он возвращает

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

Что я делаю неправильно?

Кроме того, он дает нормальный выход только до 16. когда я даю n=17, выход 3.55687428096e+014

Как это правильно?

+0

'п = 17' ответ является правильным. Он просто напечатан в научной нотации. –

+0

@JohnnyMopp да, что делать, чтобы получить только номер? в нормальном представлении. – Nuwanda

+1

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

ответ

2

Чтобы получить "0", чтобы работать, скажите read прочитать номер: n = io.read("*n")

Чтобы получить нормальное обозначение вместо научной нотации, используйте

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