在javascript中使用递归查找字符串长度

时间:2015-12-01 02:26:49

标签: javascript

我试图使用递归获取字符串长度,但无法得到它可以任何人帮助。

谢谢

enter image description here

2 个答案:

答案 0 :(得分:0)

递归的基本思想是在函数内部调用它。

    function strLen(str,cnt) {
       cnt = cnt || 0;
       if (str.length) {
          return strLen(str.substr(1), ++cnt);
       } else {
           return cnt;
       }
    }
    
    console.log(strLen("asdf"));
    console.log(strLen("1234567890"));

如果你想以蹦床的方式进行训练,那基本上是一回事,只是返回一个函数而不是调用它。

function trampoline(f) {
   while(f && typeof f === "function") {
       f = f();
   }
   return f;
}

function strLen(str, cnt) { 
    cnt = cnt || 0;
    if (str.length) {
        return strLen.bind(this, str.substr(1), ++cnt);
    } else {
        return cnt;
    }
}

console.log(trampoline(strLen("TEST")));
console.log(trampoline(strLen.bind(null, "1234567890")))

答案 1 :(得分:-1)

也许是这样的?

strLength = 0;
for (var i = 0; i < string.length; i++){
    strLength++;
}

编辑:

这是我想到的新解决方案:

function stringLength(string)
    parts = string.split("");
    stringLength = 0;
    for (x in parts){
        stringLength++;
}
console.log(stringLength("Hello"))

编辑#2:

运行代码后,我意识到了这个问题。你给我的函数为字符串的每个长度运行一次,这意味着调用堆栈填满了所有函数调用。此链接解释了更多:Maximum call stack size exceeded error

我上面提供的函数可以很好地处理超过一百万个字符的字符串。 Javascript确实受到浏览器的限制,因此浏览器对执行代码的限制会严重限制超过一定长度的性能。

简而言之,您想要的方式永远不会对长度超过几十个字符的字符串起作用。我的方式虽然可能不是最高效的,但是可以处理长度超过一百万的字符串,没有问题。

这是一个JSBin:https://jsbin.com/josuqekeli/edit?html,js,output