猴子摘香蕉一次可以摘1个或2个,总共50个,问有多少种摘法?


等我写完发现,知乎上都比我写的好,我快哭了!!!

等我写完之后发现不就是那啥啥函数,贴上lua代码
N很大的时候,估计是抗不住了,代码还需要优化。
function banana( n )
    local c = 1;
    if n == 0 then
        return 0
    elseif n == 1 then
        return 1
    elseif n == 2 then
        return 2
    end
    return (banana(n - 1) + banana(n - 2)) * c;
end

for i = 1,  10 do
    print(banana(i))
end


优化后的代码:
local know = {}

function banana( n )
    if know[n] then
        return know[n]
    end
    local c = 1;
    if n == 0 then
        know[n] = 0
        return 0
    elseif n == 1 then
        know[n] = 1
        return 1
    elseif n == 2 then
        know[n] = 2
        return 2
    end
    local r = (banana(n - 1) + banana(n - 2)) * c;
    know[n] = r
    return r
end

for i = 1,  50 do
    print(i, banana(i))
end



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值