function fact(n)
if n == 0 then
return 1
end
return n * fact(n-1)
end
for i=1, 100, 1 do
print(i,fact(i)) --发生溢出
end
通过使用lua的’bn’库可以解决这问题,从lbn下载lbn.tar.gz,
tar -xzvf lbn.tar.gz
cd bn
- 修改Makefile如下
make
在当前目录下会生成一个bn.so文件,将bn.so拷贝到代码文件所在目录,或者通过LUA_CPATH指定require搜索路径
local bn = require “bn”
function bn_fact(bn.number(n))
if n:tonumber() == 0 then return 1 end
return n * bn_fact(n-1)
endfunction fact(n)
return bn_fact(bn.number(n))
endfor i=1,100,1 do
print(i,fact(i)) -- 未发生溢出
end
Ref: 1.stackoverflow 2.http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/install.html