2015-12-01 104 views
-2

我試圖使用遞歸獲取字符串長度,但無法獲得它任何人都可以幫助。使用遞歸在javascript中查找字符串長度

謝謝

enter image description here

+4

請在這裏發表您的代碼,並說明是什麼問題。您的代碼的屏幕截圖沒有幫助。 –

+1

你的用例是什麼?爲什麼你想使用遞歸來查找字符串長度? –

+0

有沒有理由不能使用string.length屬性? – axtscz

回答

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"));

如果你想這樣做,你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")))

-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

+0

任何使用遞歸的東西不會拋出最大堆棧超過錯誤 – user5623706

+0

請參閱我的修改建議的另一種方法。另外,你是什麼意思最大堆棧? – axtscz

+0

使用遞歸如果有很長的輸入它會引發錯誤。 – user5623706