首页 > 其他 > 详细

协同与迭代器

时间:2015-01-22 20:01:42      阅读:237      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!