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

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

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

io.write("请输入数字:")
n =io.read()
fac = factorial(n)
print("数字 ",n," 的阶乘为 ",fac)

它可以正常工作,直到我输入0为止。此时会返回

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

我做错了什么?

而且,它的正常输出只能到16。当我输入n=17时,输出为3.55687428096e+014

如何解决?

点赞
用户6495588
用户6495588

为使 "0" 生效,告诉 read 读一个数字: n = io.read("*n")

为使用正常记数法而非科学计数法,使用

print("!",n," = ",string.format("%0f",fac))
2016-07-15 00:34:23