在JavaScript中递归添加任意两个数字

时间:2016-04-01 01:40:35

标签: javascript recursion

我试图在JavaScript中使用递归添加两个数字。到目前为止,我已经提出了

function sum(x, y) {
    if (y != 0) {
      return sum(x + 1, y - 1);
    } else {
      return x;
    }
}

它适用于所有正数,但不适用于负整数。我的Max调用堆栈大小超出错误。

我在Js中搜索过一个简单的递归函数,但只用C和其他语言找到它们我不太熟悉。我找到了一个Fibonacci和一个数组中的数字,但我只想要任何两个数字,而不是数组。

2 个答案:

答案 0 :(得分:2)

因为这可能是家庭作业,所以让我给出一个提示而不是用勺子喂你的代码:

不要只是检查y != 0,而是尝试检查y < 0y > 0。您应该能够找到如何处理这两种情况中的每一种情况,最终到达y == 0

聚苯乙烯。当然,即使我上面建议的扩展名,你的方法仍然只适用于整数。如果你真的想让它适用于任意浮点数,也许最简单的解决方案就是:

if (y > 0 && y < 1) {
    return sum(2*x, 2*y) / 2;
}

这个技巧的作用原因是JavaScript浮点数是二进制的,因此只能精确地表示 n / 2 k sup>,其中 n k 是整数。因此,在JavaScript中反复将任意(有限)数乘以2将最终产生整数。

当然,使用乘法和除法来实现加法似乎有点愚蠢,但至少我们原则上可以用简单的位移代替它们 - 也就是说,如果位移对浮点数有效,我们可以在JavaScript中,唉,他们没有。

答案 1 :(得分:1)

如果y值最初为负,则由于条件语句,递归不会停止。为什么不用if语句来检查y Val是大于还是小于0.然后你可以在y大于0时递减y,或者如果y小于0则递增y(为了获得相同的效果,你需要递减x在y <0)的情况下。因此递归会停止。