码迷,mamicode.com
首页 > 其他好文 > 详细

协同与迭代器

时间:2015-01-22 20:03:26      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

-----------------------------生产数组的全排列--------------------------------
function permgen(a, n)
    n = n or #a --默认n为a的大小
    if n <= 1 then
        --printResult(a)
        coroutine.yield(a) --挂机
    else
        for i = 1, n do
            a[n], a[i] = a[i], a[n] --将第i个元素放到数组末尾
            permgen(a, n-1)         --生成其余元素的排列
            a[n], a[i] = a[i], a[n] --恢复第i个元素
        end
    end
end


function printResult(a)
    for i = 1, #a do
        io.write(a[i], " ")
    end
    io.write("\n")
end

function permutation(a)
    local co = coroutine.create(function() permgen(a) end)
    return function() --迭代器
            local code, res = coroutine.resume(co)
            return res
        end
end

for p in permutation({a, b, c}) do
    printResult(p)
end

 

协同与迭代器

标签:

原文地址:http://www.cnblogs.com/vagaband/p/4242504.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!