采访问题:我被要求编写一个递归JavaScript函数,该函数将P字符长字符串作为输入,并打印出以下内容:
如果我们运行函数:printTriangle(" A Joke")
它将打印出以下内容:
A
A
A J
乔
A Jok
笑话
A Jok
乔
A J
A
A
我被要求在面试中写这个功能,我只能用迭代方法写。仍然想知道如何使用递归方法编写,任何人都可以启发吗?
答案 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;
答案 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");