递归字符串输出

Recursive strings output

本文关键字:输出 字符串 递归      更新时间:2023-09-26

我有这样的代码:

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变量不像它应该工作…我如何修复它,使它的工作方式我想要的?

每次应添加相同的字母,并在长度为字母表中该字母的索引时停止+ 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)
);

忽略全局变量iterstr,您可以将最后一个函数替换为:

function recursString(str, ind) {
  return ind == 0 ? str : str+recursString(str, --ind);
}

可以用更展开的形式重写:

function recursString(str, ind) {
  if (ind == 0)
    return str;
  else {
    ind -= 1;
    return str + recursString(str, ind);
  }
}