回答
遞歸的基本思路是自稱在函數內部。
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"));
如果你想這樣做,你tyring蹦牀方式,它基本上是同樣的事情,只是返回一個函數而不是調用它。
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")))
也許這樣的事情?
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真的受到瀏覽器的限制,所以超過一定長度的性能會受到瀏覽器對執行代碼的限制而受到很大限制。
總之,你想要的方式做到這一點永遠不會對那些幾十餘個字符的長字符串工作。我的方式,雖然可能不是最高性能的,但它可以處理長度超過一百萬的串,沒有任何問題。
任何使用遞歸的東西不會拋出最大堆棧超過錯誤 – user5623706
請參閱我的修改建議的另一種方法。另外,你是什麼意思最大堆棧? – axtscz
使用遞歸如果有很長的輸入它會引發錯誤。 – user5623706
- 1. Python的字符串長度遞歸
- 2. 使用遞歸查找字符串中的字符
- 3. 查找最長字符串的長度
- 4. java使用遞歸查找字符串中的子串
- 5. 在遞歸字符串的開始處查找單詞的長度
- 6. 如何在使用strlen()的out中查找字符串長度?
- 7. 可變長度字符串內容的非遞歸檢查
- 8. 使用javascript在字符串中查找最長單詞
- 9. javascript遞歸字符串concatenation
- 10. 查找字符串中所有子字符串的長度
- 11. 查找數組中字符串的平均字符串長度 - Javascript
- 12. 查找multiplicy長度的字符串
- 13. 查找字符串的長度
- 14. Javascript:檢查最小字符串長度
- 15. 嘗試確定在C++中使用遞歸的字符串的長度
- 16. 遞歸組串上長度
- 17. 遞歸查找字符串中出現的字符數
- 18. 如何遞歸查找字符串中的一組字符?
- 19. 使用strlen檢查字符串長度
- 20. 使用Python查找字符串中大寫字母的最長長度
- 21. 查找字符串長度,而不使用strlen的和用C
- 22. Typescript字符串|字符串[]查找數組長度
- 23. NSString stringByAppendingString:遞歸長字符串
- 24. 在PHP中檢查字符串長度
- 25. SQL:查找數據字符串中的動態長度字符
- 26. 查找字符串中字符之間的長度
- 27. 在字符串上查找字符長度
- 28. 查找包含其自身長度的字符串的長度?
- 29. 在長字符串中查找模式?
- 30. 在SunOS 5.10中遞歸地查找和替換字符串
請在這裏發表您的代碼,並說明是什麼問題。您的代碼的屏幕截圖沒有幫助。 –
你的用例是什麼?爲什麼你想使用遞歸來查找字符串長度? –
有沒有理由不能使用string.length屬性? – axtscz