javascript - 递归字符串输出

标签 javascript recursion

我有这个代码:

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/

相关文章:

javascript - 为什么 Phrogz 多列排序在我的情况下不起作用

javascript - 部署网站时内联所有JavaScript是否有益

c# - List Clear() 方法是否会破坏子级 [C#.NET]?

algorithm - 函数类型中的ocaml如何使用匹配?

javascript - 递归javascript数组长度

javascript - 将 HTML 编码的字符串 append 为 HTML,而不是文本

javascript - Jquery UI 可拖动不会调整其他 DIV 的大小

javascript - 如何将下拉菜单与按钮对齐

c# - 递归 LINQ 查询函数中的嵌套索引

php - mysql 层次递归查询