猴子摘香蕉一次可以摘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



以下是使用HTML5 canvas和JavaScript编写的猴子香蕉动画,您可以通过单击“开始”和“暂停”按钮来控制它。 HTML代码: ``` <canvas id="canvas" width="400" height="400"></canvas> <button id="startBtn">开始</button> <button id="pauseBtn">暂停</button> ``` JavaScript代码: ``` var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); var monkeyImg = new Image(); monkeyImg.src = "https://i.imgur.com/9X9Kt4Z.png"; var bananaImg = new Image(); bananaImg.src = "https://i.imgur.com/4OFx8g5.png"; var monkey = { x: 50, y: 250, speed: 3, frame: 0, frames: [ {sx: 0, sy: 0}, {sx: 150, sy: 0}, {sx: 300, sy: 0}, {sx: 0, sy: 150}, {sx: 150, sy: 150}, {sx: 300, sy: 150}, {sx: 0, sy: 300}, {sx: 150, sy: 300}, {sx: 300, sy: 300}, ], update: function() { this.frame++; if (this.frame >= this.frames.length) { this.frame = 0; } this.x += this.speed; if (this.x > canvas.width) { this.x = -150; } }, draw: function() { var frame = this.frames[this.frame]; ctx.drawImage(monkeyImg, frame.sx, frame.sy, 150, 150, this.x, this.y, 150, 150); } }; var banana = { x: 300, y: 50, update: function() {}, draw: function() { ctx.drawImage(bananaImg, this.x, this.y, 50, 50); } }; var isPaused = true; var startButton = document.getElementById("startBtn"); var pauseButton = document.getElementById("pauseBtn"); startButton.addEventListener("click", function() { isPaused = false; startButton.disabled = true; pauseButton.disabled = false; requestAnimationFrame(gameLoop); }); pauseButton.addEventListener("click", function() { isPaused = true; startButton.disabled = false; pauseButton.disabled = true; }); function gameLoop() { if (isPaused) { return; } ctx.clearRect(0, 0, canvas.width, canvas.height); monkey.update(); monkey.draw(); banana.draw(); requestAnimationFrame(gameLoop); } ``` 该程序定义了两个对象:猴子香蕉猴子一个对象表示,它包含其位置、速度、当前帧和一组帧,该帧定义为从精灵表中提取的图像矩形。香蕉只需要位置,因为它是静态的。 程序还定义了一个游戏循环函数`gameLoop()`,该函数在每个帧上更新和绘制对象。它使用`requestAnimationFrame()`来使其每秒运行60次,并且只有在`isPaused`变量为false时才会运行。 单击“开始”按钮会将`isPaused`设置为false并启动游戏循环。单击“暂停”按钮会将`isPaused`设置为true并停止游戏循环。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值