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

问题来自知乎

等我写完之后发现不就是那啥啥函数,,贴上lua代码

N很大的时候,估计是抗不住了,代码还需要优化。

function banana( n )local c = 1;if n == 0 thenreturn 0elseif n == 1 thenreturn 1elseif n == 2 thenreturn 2endreturn (banana(n – 1) + banana(n – 2)) * c;endfor i = 1, 10 doprint(banana(i))end

优化后的代码:

local know = {}function banana( n )if know[n] thenreturn know[n]endlocal c = 1;if n == 0 thenknow[n] = 0return 0elseif n == 1 thenknow[n] = 1return 1elseif n == 2 thenknow[n] = 2return 2endlocal r = (banana(n – 1) + banana(n – 2)) * c;know[n] = rreturn rendfor i = 1, 50 doprint(i, banana(i))end

车到山前必有路,没路可以先开路,开路就得有乐观,

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

相关文章:

你感兴趣的文章:

标签云: