【问题标题】:Forming an inverted ascii triangle art using JS looping使用 JS 循环形成倒置的 ascii 三角形艺术
【发布时间】:2015-08-26 12:56:30
【问题描述】:

没有嵌套循环,你怎么能形成这样的ascii艺术?

####
###
##
#

这是我目前拥有的:

function invertTriangle (row) {
  var asteric = "*" * row;
  for ( var y=row; y>=row; y--){
      asteric = asteric - "*";
      console.log(asteric);
  }
};

invertTriangle(10);

感谢您的帮助和解释!

谢谢!

【问题讨论】:

  • 使用递归。就像你可以创建一个递归函数来计算n!(阶乘)一样,你可以创建一个来解决这个问题。
  • 我认为 OP 的意思是如何在一个循环中完成它。递归仍然可以嵌套。
  • @AaditMShah - 是的,递归确实可以嵌套 - 事实上,如果没有嵌套,它就不是递归,不是吗? :confused: 但是这个问题要求一个不涉及嵌套循环的解决方案。递归符合规定的要求。

标签: javascript function loops ascii


【解决方案1】:

试试:

var string = "";

for (var i = 0, j = 4, k = 4; i < 10; i++) {
    string += "*";
    if (--j === 0) {
        j = --k;
        string += "\n";
    }
}

alert(string);

希望对您有所帮助。

【讨论】:

  • 您能解释一下为什么使用 j 和 k 变量吗?我对 JS 运算符的逻辑,以及 JS 函数是如何工作的非常陌生。几天前才开始学习!
【解决方案2】:

这是一种使用递归的方法。

基本上,您可以使用您希望在第一行打印的字符数来调用该函数。然后它构造一个包含这么多字符的字符串。然后它会减少所需的字符数,如果这个数大于 0,则再次调用自身并将新结果添加到当前结果中。这一直持续到我们到达需要零个字符的行。此时,函数不再调用自己,将完整构造的字符串返回给原来的调用者。

代码:

<!DOCTYPE html>
<html>
<head>
<script>
"use strict";
function byId(e){return document.getElementById(e);}

window.addEventListener('load', onDocLoaded, false);

function onDocLoaded()
{
    byId('triTgt').innerText = makeTriString(40);
}

function makeTriString(nStars)
{
    var str = '';
    for (var i=0; i<nStars; i++)
        str += "*";
    str += "\n";
    nStars--;
    if (nStars > 0)
        str += makeTriString(nStars);
    return str;
}
</script>
<style>
</style>
</head>
<body>
    <div id='triTgt'></div>
</body>
</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多