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

时间:2016-07-12 15:03:50

标签: function recursion lua 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作为输入之前,它可以正常工作。它返回

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

我做错了什么?

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

如何做到对不对?

1 个答案:

答案 0 :(得分:2)

获得" 0"要工作,请告诉read阅读一个数字:n = io.read("*n")

要获得正常符号而不是科学记数法,请使用

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