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

标签 javascript recursion

我正在尝试在 JavaScript 中使用递归来添加两个数字。到目前为止我已经想出了

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

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

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

最佳答案

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

而不是简单地检查 y != 0 ,尝试检查 y < 0y > 0 。您应该能够弄清楚如何处理这两种情况,最终得到y == 0。 .


诗。当然,即使使用我上面建议的扩展,您的方法仍然只适用于整数。如果你真的想让它适用于任意 float ,也许最简单的解决方案是这样的:

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

这个技巧起作用的原因是 JavaScript float 是二进制的,因此只能精确表示 n/2k 形式的数字,其中 nk 是整数。因此,在 JavaScript 中重复将任何(有限)数字乘以 2 最终将产生一个整数。

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

关于javascript - 在 JavaScript 中递归地添加任意两个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36346652/

相关文章:

javascript - 如何指定Map javascript的类型?

javascript - 通过网页使用硬件

javascript - crossbrowser - 获取 css 颜色

c++ - 为什么我的 C++ 程序中会出现死循环?

javascript - 分形树递归问题

javascript - 从子窗口访问父 URL 时出现问题

javascript - jQuery Plugin to "Bold"Matched Letters(谷歌搜索引擎显示结果的方式)

java - 在 BST 中查找节点位置并将其递归地添加到树中

c# - 递归检查接口(interface)的实现,c#

java - 打破java中的递归