【问题标题】:Javascript Hailstone SequenceJavascript 冰雹序列
【发布时间】:2016-11-12 08:00:25
【问题描述】:

所以我正在尝试为冰雹获取此功能,但我似乎无法将其全部打印在一行上。代码如下:

var hailStoneSeq = function(n){
   var seq = n + " "

    while(n != 1)
   {
       if(n % 2 == 0)
       {
          n = n / 2
          console.log(n)
          var newSeq = n
       }    
       else
       {    
          n = ((n * 3) + 1)
          console.log(n)
          newSeq =  n
        }

   }

   return seq + newSeq  
  }

现在,当我运行它时,console.log 可以工作并显示整个序列。但是return语句只返回输入的值,所以无论n原来是什么,都是1。像这样:

 hailStoneSeq(5)
 16 
 8
 4
 2
 1
 "5 1"

如何让最后的 return 语句在一行上返回整个序列?

【问题讨论】:

    标签: javascript while-loop sequence


    【解决方案1】:

    删除console.log(n) 行并在函数返回之前创建一个数组输出。此外,您不需要newSeq 变量,只需使用n

    编辑:误解了问题,代码已修复

    function hailStoneSeq(n){
        var seq=[n]
    
        while(n!=1){
            if(n%2==0) n/=2
            else n=(n*3)+1
    
            seq.push(n)
        }
    
        return seq.join(' ')
    }
    
    console.log(hailStoneSeq(5))
    

    【讨论】:

      【解决方案2】:

      我稍微修改了您的代码,删除了未使用的变量和代码重复:

      var hailStoneSeq = function(n){
          var arr = [];
          arr.push(n);
          while(n != 1)
          {
              n =n % 2 ? ((n * 3) + 1) : n / 2;
              console.log(n)
              arr.push(n);
          }
          return arr.join(" ")
      };
      
      console.log(hailStoneSeq(5));
      

      重点是数组的join方法的使用。

      【讨论】:

      • OP 想在一行上输出整个序列,这没有解决。
      • 循环内的控制台日志用于调试。这很明显。最后我的方法返回字符串。
      • 我错了,对不起
      【解决方案3】:

      应该是这样的:

      function hailStoneSeq(n){
          var seq = n;
      
          while(n != 1){
              if(n % 2 == 0){
                  n = (n / 2);
              }else{
                  n = ((n * 3) + 1);
              }
      
              seq += (" " + n);
          }
      
          return seq;
      }
      
      console.log(hailStoneSeq(5));
      

      基本上,您需要循环内的seq = seq + ...(或seq += ...)来存储每次迭代的进度。

      在您的代码中,您存储了原始的 seq 并一遍又一遍地重写 newSeq = n,然后将它们一起返回。

      【讨论】:

        猜你喜欢
        • 2019-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-06
        • 2012-08-29
        • 1970-01-01
        相关资源
        最近更新 更多