在JavaScript中使用单词字符打印三角形仅使用递归

时间:2016-07-12 05:49:21

标签: javascript string recursion

采访问题:我被要求编写一个递归JavaScript函数,该函数将P字符长字符串作为输入,并打印出以下内容:

  1. 第一行打印字符串的第一个字符
  2. 第二行打印字符串的前两个字符
  3. 等等,直到Pth行打印字符串的所有字符
  4. (第P + 1)行打印第一个(P-1)个字符
  5. (第P + 2)行打印第一(P-2)个字符
  6. 依此类推,直到(2P -1)行只打印第一个字符
  7. 如果我们运行函数:printTriangle(" A Joke")

    它将打印出以下内容:

    A

    A

    A J

    A Jok

    笑话

    A Jok

    A J

    A

    A

    我被要求在面试中写这个功能,我只能用迭代方法写。仍然想知道如何使用递归方法编写,任何人都可以启发吗?

5 个答案:

答案 0 :(得分:4)

正如Pieter Witvoet所暗示的,这是一个解决方案,它使用单个递归调用和两个打印。它比其他人更简单,也希望更容易理解,因为它使用递归的方法而不是迭代作为尾递归。



function triangle(str, i) {
  i = i || 1;
  var start = str.substr(0, i);

  console.log(start);
  if (i < str.length) {
    triangle(str, i + 1);
    console.log(start);
  }
}

triangle("A Joke");
&#13;
&#13;
&#13;

答案 1 :(得分:2)

这是我的解决方案:

function triangle(str, i) {

  if(i === 0) return;
    
  i = i || 1;
    
  if(i > str.length) return triangle(str, -1*str.length+1) ;
    
  console.log(str.substr(0, Math.abs(i)));
    
  return triangle(str, i+1) ;
}

triangle("A Joke");

答案 2 :(得分:0)

这是我在功能JavaScript中使用递归的解决方案。

var tmp = with25.JobItems;

with25.JobItems = new MyType[_with25.NumJobItems]; 
tmp.CopyTo(with25.JobItems, 0);

答案 3 :(得分:0)

        function rPrint(val, num) {
        var n2 = num;
        if (num > val.length)
            n2 = val.length- Math.abs(val.length - num);
        document.write("<br>" + val.toString().substr(0, n2));
        if (num < val.length*2)
            rPrint(val, ++num);
    }

然后像rPrint("A Joke",1);

一样使用它

答案 4 :(得分:0)

这是另一种递归解决方案。

var i = 1; //counter

/*Recursive function*/
function printTriangle(str) {
  var len = str.length;
  if (len > i) { //process string in default order
    console.log(str.substring(0, i));
    i += 1;
    return printTriangle(str);
  } else if (len > 0) { //process string in reverse order
    console.log(str);
    var sub_str = str.substring(0, str.length - 1);
    return printTriangle(sub_str);
  } else {
    return str;
  }
}

/*Process string*/
printTriangle("A Joke");