Fork me on GitHub

【Lua程序设计第四版练习题答案】ch01 Lua语言入门

联系1.1: 运行阶乘的示例并观察,如果输入负数,程序会出现什么问题?试着修改代码来解决问题。

 
-- 定义一个计算阶乘的函数
function fact (n)
if n == 0 then
return 1
else
return n * fact(n-1)
end
end
print("enter a number:")
a = io.read("*n") -- 读取一个数字
print(fact(a))

这是本章最开始提到的阶乘示例程序,通过实际的运行,我们了解到由于程序没有对负数形式进行校验的逻辑,因此程序会一直迭代递归下去,没有终止条件lua编译器报出堆栈溢出的错误才结束。

 

在进行修改之后的代码如下:

opefunction fact(n)
n = n or 0
if n < 0 then
error("Cannot calculate the factorial of a negative number")
elseif n == 0 then
return 1
else
return n * fact(n-1)
end
end
print("Enter a number: ")
a = io.read("*n")
print("Answer is: ", fact(a))

这里加入对输入负数的终止条件的判断,因此不会再出现堆栈溢出的错误。

 
posted @ 2019-07-08 09:40  gamedev'  阅读(1070)  评论(0编辑  收藏  举报