2016-05-03 40 views
0

我寫了一個函數。它在循環的幫助下工作。如何遞歸重寫?在一行中搜索字符B.遞歸

function countBs(str) { 
    var counter = 0; 

    for (var i = 0; i <= str.length - 1; i++) { 
    if (str.charAt(i) == 'B') 
     counter++; 
    } 

    return counter; 
} 
+0

您必須嘗試。我首先看看我的問題,並將其分解爲可重複的較小問題,並使用基本案例來阻止遞歸。 – jmugz3

+0

我只用嵌套函數獲得。 – Aleksandr

回答

1

我的努力

function countBs(str, mychar) { 
    if (str !== '') { 
    if (str.substring(0, 1) === mychar) { 
     return 1 + countBs(str.substring(1), mychar); 
    } else { 
     return 0 + countBs(str.substring(1), mychar); 
    } 
    } else { 
    return 0; 
    } 

} 

我加了一個參數字符,這樣你可以指定你想要的任何角色。

countBs('BBBBBsss', 'B'); 
+0

不錯。謝謝! – Aleksandr

0

您需要通過計數器作爲功能太

function countBs(str, counter, index) 
{ 
    //initialize values if not passed 
    counter = counter && counter > str.length || 0; 
    index = index && index > str.length || 0; 

    //terminating condition 
    if (index == str.length) 
    { 
     return counter; 
    } 

    if (str.charAt(index++) == 'B') 
    { 
     counter++; 
    } 

    return countBs(str, counter, index); 
} 

如果你想只檢查大寫B的現在調用方法

countBs("asdasds23dbdssd"); 
1
function countBs(str){ 
    if(str == ""){ 
    return 0; 
    }else{ 
    str = str.toLowerCase(); 
    if(str.charAt(str.length-1) == 'b'){ 
     return countBs(str.substring(0, str.length-1)) + 1; 
    }else{ 
     return countBs(str.substring(0, str.length-1)); 
    } 
    } 
} 

你顯然可以省略str.toLowerCase(),只需要比較B即可。該函數計算字符串中的大寫和小寫B的值。