喵哥很喜欢吃小鱼干,小鱼干2金一条,吃完的2个鱼头可以换1条小鱼干,4条鱼骨可以换1条小鱼干!(不可以:赊账、用鱼骨换鱼头),问10金最多可以吃几条小鱼干?
解题:
问题的关键在,每次吃完鱼都会剩鱼头和鱼骨,剩的鱼头和鱼骨又可以再换小鱼干。
需要用到递归的算法。
写一个函数,参数是上一次剩的鱼头和鱼骨,求得本次吃完剩下的鱼头和鱼骨,返回本次吃鱼的条数+下次吃的条数
var gold = 10;
var price = 2;
var _head, _body;
(function fn1(gold, price) {
var fish = parseInt(gold / price);
var _fish = fn2(fish, fish);
console.log(fish + _fish);
}(gold, price))
function fn2(head, body) {
if (head >= 2 || body >= 4) {
_head = parseInt(head / 2) + (head % 2) + parseInt(body / 4);
_body = parseInt(body / 4) + (body % 4) + parseInt(head / 2);
return parseInt(head / 2) + parseInt(body / 4) + fn2(_head, _body);
}
return 0;
}
答:喵哥最多能吃到15条小鱼干