【问题标题】:Overlapping loops inside functions函数内部的重叠循环
【发布时间】:2018-05-03 06:40:30
【问题描述】:

在代码大战中,我正在训练一个乘法逆项目。例如,目标是——如果“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,我被困在这里。我需要循环这个过程,直到我得到一个数字。

有人可以帮帮我吗? 对不起,如果我的问题不清楚...

【问题讨论】:

  • 你只需要一个while循环来包装这个方法
  • 您可以保持您的代码原样,并且只需像这样return num &lt; 10 ? num : persistence(res); 那样制作您的返回语句。您的函数仍将运行,但不会错过它所花费的几分之一秒。

标签: javascript arrays function loops


【解决方案1】:

数组方法是你的朋友。在这种情况下,使用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));

【讨论】:

    【解决方案2】:

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

    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'));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 2011-03-08
      • 2020-06-16
      • 2011-11-12
      • 1970-01-01
      相关资源
      最近更新 更多