【发布时间】:2020-01-05 21:59:33
【问题描述】:
我创建了一个(伪)随机创建包含数字的表格的函数。然后我循环这个函数,直到至少找到正确的结果。一旦我确认至少存在一个这样的结果,我就会停止函数并返回表格。
当我创建包含小值的表时,没有问题。然而,一旦随机数增长到数百个范围,该函数开始返回 nil,即使在我返回它之前的那一行表是真的。
local sort = table.sort
local random = math.random
local aMin, aMax = 8, 12
local bMin, bMax = 200, 2000
local function compare( a, b )
return a < b
end
local function getNumbers()
local valid = false
local numbers = {}
-- Generate a random length table, containing random number values.
for i = 1, random( aMin, aMax ) do
numbers[i] = random( bMin, bMax )
end
sort( numbers, compare )
-- See if a specific sequence of numbers exist in the table.
for i = 2, #numbers do
if numbers[i-1]+1 == numbers[i] or numbers[i-1] == numbers[i] then
-- Sequence found, so stop.
valid = true
break
end
end
for i = 1, #numbers-1 do
for j = i+1, #numbers do
if numbers[j] % numbers[i] == 0 and numbers[i] ~= 1 then
valid = true
break
end
end
end
if valid then
print( "Within function:", numbers )
return numbers
else
getNumbers()
end
end
local numbers = getNumbers()
print( "Outside function:", numbers )
据我了解,这个函数应该无限循环,直到我找到一个有效的序列。根据我的代码,该函数甚至可以结束的唯一方法是 valid 为真。
有时,通常情况下,如果数字很大,函数会简单地将 nil 值输出到函数外部。这是怎么回事?
【问题讨论】:
标签: lua