首页 > 解决方案 > 结束递归的有效方法?

问题描述

我正在尝试定义一个递归函数,如果给定输入的平方和导致 1,则返回 X,这很好。但是,如果输入没有导致 1,那么它会一直循环,我找不到退出它的方法。

例如,整数 7、10、13 的输入导致 1,但 2、3、4、5、6、11 的输入不会。如果我尝试 x === 4 || x === 0 ,它会结束不会导致 1 的输入的递归,但对于某些输入,它需要多次递归调用才能达到 4,而且效率不高。稍后,我想将返回值用于其他计算。

function recursion(x) {
  if (x === 0) {
    return;
  }

  if (x === 1) {
    return x;
  }

  x = squareSum(x);
  return recursion(x);
}

这是 squareSum 函数。

function sqaureSum(n){
    let sumTotal;

    if (n < 10){
        sumTotal = Math.pow(n, 2);
        return sumTotal;

    }

    sumTotal = Math.pow(n % 10, 2) + squareSum(Math.floor(n / 10));
    return sumTotal;
}

标签: javascriptrecursion

解决方案


因为sumTotal = Math.pow(n % 10, 2) + squareSum(n / 10); 当你计算n / 10它可以是一个浮点数时,你应该将你的数字转换为int

用于检查float里面的数字 log xrecursion

function recursion(x) {
  console.log(x) // <-- HERE
  ...
}

Math.floor, Math.ceil,Math.round可以帮助你

并且对于

  if (x === 0) {
    return;
  }

在里面recursion添加一个值( 0 或 1 )。它返回undefiend并转换为NaN


推荐阅读