【问题标题】:returning a triangle返回一个三角形
【发布时间】:2021-03-10 03:22:39
【问题描述】:

我正在尝试编写一个函数来返回一个反向直角三角形,但我无法确定哪里出错了。

function triangle(num) {
  let star = ""
  for (let i = num; i >= 1; i--) {
    for (let j = num; j >= 1; j--) {
      star += "*" + "\n"
    }
  }
  return star
}

console.log(triangle(6));

我的问题是我无法让整个函数以反向三角形的形式返回一个 * 字符串。我相信我在错误的地方也编造了“\n”,但我不知道应该把它改到哪里。

我收到了这个:

console.log(triangle(6));    
************************************

我应该收到这个:

console.log(triangle(6));
"******\n*****\n****\n***\n**\n*"

我应该将 \n 连接到字符串输出。

-这是我遇到问题的地方-

【问题讨论】:

    标签: javascript for-loop recursion


    【解决方案1】:

    for 语句用于以命令式风格循环,而函数式风格使用递归。递归是一种函数式遗产,因此将其与函数式风格一起使用会产生最佳结果。这意味着要避免变量重新分配和其他副作用。

    const line = (n = 0) =>
      n === 0
        ? "\n"
        : "*" + line(n - 1)
    
    const triangle = (n = 0) =>
      n === 0
        ? ""
        : line(n) + triangle(n - 1)
    
    console.log(triangle(6))
    ******
    *****
    ****
    ***
    **
    *
    

    【讨论】:

      【解决方案2】:

      我想这就是你想要的:

      function triangle(num) {
        let star = ""
        for (let i = num; i >= 1; i--) {
          for(let j = i; j >= 1; j--) {
             star += "*"
          }
          if(i !== 1) {
            star += "\\n"
          }
        } 
        return star 
      }
      
      console.log(triangle(6));

      在此处查看示例:https://codepen.io/bj-rn-nyborg/pen/gOwOdxR

      我将+"\n" 移到外循环,并初始化let j = i 而不是num

      【讨论】:

      • 只需发布可执行的 js 代码。 ? 你例子中的代码也是一个可运行的sn-p。
      • 这修复了它变成一个三角形,但我仍然需要一个字符串内的整个东西。
      • 我已经更新了codepen。它现在还将三角形作为字符串写入 DOM:codepen.io/bj-rn-nyborg/pen/gOwOdxR
      • \n 是一个隐藏字符,它已经在我构建的代码中。这就是导致新行的原因。如果你想把它显示为一个字符串,你只需要转义它,你可以用反斜杠来做,像这样:star += "\\n"我也更新了codepen。 ?
      猜你喜欢
      • 1970-01-01
      • 2019-02-20
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      • 2014-05-20
      相关资源
      最近更新 更多