意外的令牌 - 做递归打印圣诞树

时间:2018-01-05 02:32:04

标签: javascript ecmascript-6

我的代码下面有什么问题?无法发现我的任何问题。 https://jsfiddle.net/rz8y6vc7/

function pyramid(n, row, level = '') {
  if (row === n) {
    return;
  }

  if (level.length === 2 * n - 1) {
    return pyramid(n, row + 1);
  }

  const midpoint = Math.floor((2 * n - 1) / 2);
  let add;
  if (midpoint - row <= level.length && midpoint + row => level.length) {
    add = '#';
  } else {
    add = ' ';
  }
  pyramid(n, row, level + add);
}

pyramid(4)

此行有错误。if (midpoint - row <= level.length && midpoint + row => level.length) {

2 个答案:

答案 0 :(得分:0)

=>不是JavaScript中的运算符。

您可能会想到<=,它是小于或等于运营商。

您可以在此处详细了解此特定运算符:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Less_than__or_equal_operator

答案 1 :(得分:0)

您的代码存在以下问题:

  1. 您没有将输出打印到浏览器中,我使用document.write()来显示输出。

  2. HTML中不保留空格,您可以将文本插入保留空格的pre标记中。

  3. 您收到max stack exceeded error因为您没有初始化变量row。您可以像初始化level变量一样初始化此变量!

  4. 请参阅以下代码段,如果您遇到任何问题,请告诉我们!

    function pyramid(n, row = 0, level = '') {
      if (row === n) {
        return;
      }
    
      if (level.length === 2 * n - 1) {
        document.getElementById("test").innerHTML += "\n";
        return pyramid(n, row + 1);
      }
    
      const midpoint = Math.floor((2 * n - 1) / 2);
      let add;
      if (midpoint - row <= level.length && midpoint + row >= level.length) {
        add = '#';
      } else {
        add = ' ';
      }
      document.getElementById("test").innerHTML += add;
      pyramid(n, row, level + add);
    }
    
    pyramid(4)
    <pre id="test"></pre>