实现递归函数(阶乘)时出现堆栈溢出错误

stack overflow error while implementing a Recursive Function(factorial)

我尝试实现这样的阶乘函数:

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 之前它工作正常。它returns

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

我做错了什么?

此外,它仅在 16 之前提供正常输出。当我给出 n=17 时,输出是 3.55687428096e+014

如何正确处理?

要让“0”起作用,请告诉 read 读取一个数字:n = io.read("*n")

要获得普通记数法而不是科学记数法,请使用

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