函数内部重叠循环

时间:2018-05-03 06:40:31

标签: javascript arrays function loops

在代码大战中,我正在训练一个乘法逆项目。例如,目标是 - 如果“39”是输入,则输出应为“4”[39 = 3 * 9 ==> 27 = 2 * 7 => 14 = 1 * 4 ==> (4)]。 我写了一些代码,它只是将输入乘以第一级(39 ==> 27)。

我的代码到现在为止,

function persistence(num) {

var digits = new Array();
digits = num.toString().split("").map(Number);
var res = 1;
for (i = 0; i < digits.length; i++) { res = res * digits[i]; }
return res;
console.log(persistence(digits));

}

我只是在学习javascript而且我被困在这里。我需要循环这个过程,直到我得到一位数字。

有人可以帮助我吗? 对不起,如果我的问题不明确......

2 个答案:

答案 0 :(得分:2)

数组方法是你的朋友。在这种情况下,请使用mapreduce

function multiplyDigits(num) {
  if (num < 10) return num;
  console.log(num);
  const multiplied = String(num)
    .split('')
    .map(Number)
    .reduce((a, n) => a * n, 1);
  return multiplyDigits(multiplied);
}
console.log(multiplyDigits(39));

答案 1 :(得分:0)

除格式外,这与您的代码非常相似。我只评论了两个变化:

function persistence(num) {

    var digits = new Array();
    digits = num.toString().split("").map(Number);

    // 1) Added this if statement to return the result
    //   immediately if there is only one digit.
    if ( digits.length === 1 )
        return digits[0];

    var res = 1;
    for (i = 0; i < digits.length; i++) 
        res = res * digits[i];

    // 2) Changed from `return res;` so that the function you wrote
    //   is called again on the result (if there were more than one digit).
    return persistence(res);

}

console.log(persistence('39'));

您可以使用以下解决方案:

function persistence(num) {
    return num < 10 
      ? num
      : persistence( (num+'').split('').reduce( (a,b) => a*b ) );
}

console.log(persistence('39'));