我应该使用递归来回答这个而不是循环吗?

时间:2014-10-08 04:04:28

标签: java loops recursion

一名男子开始开车去拜访他的姻亲。总距离为60英里,他以每小时60英里的速度开始。在行驶了1英里之后,他失去了对旅程的一些热情,并且(瞬间)减速到每小时59英里。再行驶一英里后,他再次减速到每小时58英里。这种情况继续下去,每行驶一英里,每小时逐步减慢1英里,直至行程结束。

现在我确实知道该怎么做,我相信,

我要找到他每英里行驶的速度并计算他行驶1英里需要多长时间,然后我要添加所有值以达到答案。

我试图写一个等式来做这个,但我认为循环或递归会更简单。

有人可以指出我正确的方向,让这个程序给我正确的答案。在纸面上,我可以轻松地添加并获得4.6小时(正确的答案),但是编写递归程序有点困难(或者我应该使用循环?)

2 个答案:

答案 0 :(得分:0)

对于这个确切的问题,没有太多的复杂性和资源问题。您可以使用任一解决方案。我想在这种情况下循环会更简单。那说递归也不复杂。

答案 1 :(得分:0)

递归地是:

public static double run(double miles, double speed){
    if(miles <= 1){
        return 1/speed;
    }
    return 1/speed + run(miles-1, speed-1);
}

这将为您提供所需的小时数(作为双倍)(假设里程以英里为单位,速度以英里/小时为单位)

相应地修改您想要的数据类型

如果您希望使用三元运算符的代码块更小:

public static double run(double miles, double speed){
    return 1/speed + (miles <= 1 ? 0 : run(miles-1, speed-1));
}