【问题标题】:Should I use recursion to answer this instead of a loop?我应该使用递归而不是循环来回答这个问题吗?
【发布时间】:2014-12-02 15:34:06
【问题描述】:

一个男人开始开车去拜访他的姻亲。总距离为 60 英里,他以每小时 60 英里的速度出发。在行驶了 1 英里之后,他对旅途失去了一些热情,并且(瞬间)减速到每小时 59 英里。再行驶一英里后,他再次减速至每小时 58 英里。这种情况会继续,每行驶一英里就会逐渐减慢 1 英里/小时,直到行程完成。

现在我知道我该做什么了,

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

我试图写一个方程来做到这一点,但我认为循环或递归会更简单。

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

【问题讨论】:

  • 为您的案例使用循环。

标签: java loops recursion


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    递归会是:

    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));
    }
    

    【讨论】:

      猜你喜欢
      • 2019-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 2021-03-20
      相关资源
      最近更新 更多