我有这个代码:
var al = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
function output(a, ind) {
if (!ind) {
ind = 0;
}
if (ind < 26) {
var newtext = document.createTextNode(recursString(a[ind], ind));
var br = document.createElement("br");
var para = document.getElementById("hello");
para.appendChild(newtext);
para.appendChild(br);
output(a, ++ind);
}
}
var iter = 0;
var s = "";
function recursString(str, i) {
if (i === 0) {
s += str;
return s;
}
if (iter < i) {
s += str;
iter++;
recursString(str, i);
}
return s;
}
它输出这样的字符串:
A
AB
ABC
ABCD
ABCDE
etc.
但我需要:
A
BB
CCC
DDDD
EEEEE
etc.
我需要只使用递归。
我怀疑,根据调试,s
变量无法正常工作。
我如何修复它以使其按我想要的方式工作?
最佳答案
你应该每次追加相同的字母,当长度为alfabet中字母的索引+1时停止:http://jsfiddle.net/5h4sX/ .
请注意,您当前正在函数外部更改变量。您也可以将它们与每个递归调用一起传递,但如果您想让它更易于理解,则不需要。
var str = "",
iter = 0;
function recursString(letter, totalLength) {
str += letter; // add letter
if (iter === totalLength) { // stop recursing
return str; // return what we have built up
} else if (iter < totalLength) {
iter++; // increment iteration variable
return recursString(letter, totalLength); // return the result of a recursive call
}
}
尽管如此,您确实需要在每次递归调用之前重置变量:
str = "";
iter = 0;
var newtext = document.createTextNode(
recursString(a[ind], ind)
);
关于javascript - 递归字符串输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8228906/