之前在CSDN中见到过一个运输问题,问题如下:
现有1辆车,10桶油,车自带一油箱,油箱容量恰为一油桶容量,每一桶油可以让车跑1公里,而车上每次只能带一个油桶,初始条件为油桶和车现在同一起跑位置,车上油箱中满油,而油桶里的油可以倒到车的油箱,反之亦可以。问用JAVA实现这个过程,求出车可以用这些油最多跑多远。
这个题在数学里属于优化类的题目,但是这个题出现在面试的时候,那么个人认为这个题的目的不是考查你的数学能力,加之用JAVA实现,显然它考查的是程序设计能力。故把这个问题的模型进行抽象化为JAVA中的递归问题。
思路:可以考虑每次让车用一桶油将剩余油向前运送一定距离,这样就可以用递归方法求解。用JAVA实现如下:
int bucketNum = 11;//初始油问题为11桶(加油箱中油)
int distance = 0;//车的运输距离
public int transit(int bucketNum )
{
if(bucketNum==2)
{
distance += 2;//如仅剩两桶油可以直接跑完
return distance;
}
else
{
distance += 1/(2*bucketNum - 3);//车用一桶油把其余油向前运送的距离
distance += transit(bucketNum--);
}
}