我试图在JavaScript中使用递归添加两个数字。到目前为止,我已经提出了
function sum(x, y) {
if (y != 0) {
return sum(x + 1, y - 1);
} else {
return x;
}
}
它适用于所有正数,但不适用于负整数。我的Max调用堆栈大小超出错误。
我在Js中搜索过一个简单的递归函数,但只用C和其他语言找到它们我不太熟悉。我找到了一个Fibonacci和一个数组中的数字,但我只想要任何两个数字,而不是数组。
答案 0 :(得分:2)
因为这可能是家庭作业,所以让我给出一个提示而不是用勺子喂你的代码:
不要只是检查y != 0
,而是尝试检查y < 0
和y > 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)的情况下。因此递归会停止。