2015-06-22 4 views
1

Я пытаюсь закодировать этот код, но я не получаю ожидаемого результата: Учитывая строку, вычислите рекурсивно (без циклов) число строчных символов «х» в строке , countX("xxhixx") → 4 countX("xhixhix") → 3 countX("hi") → 0подсчет специальных символов с рекурсией

Вот мой метод:

public int countX(String str) { 
    int count = 0; 

    if(str.length() >= 1) { 
     if(str.substring(0, 1).equals("x")) { 
      str = str.substring(1, str.length()); 
      count = count + 1 + countX(str); 
     } 
    } 
    else { 
     str = str.substring(1, str.length()); 
     count = count + countX(str); 
    } 

    return count; 
} 
+0

Что произошло с вашим отступом? – khelwood

+0

Отправленный код даже не компилируется. Количество закрывающих фигурных скобок больше числа начальных. –

+0

Я кодирую на веб-сайте, и они не позволяют мне нажать «вкладку». Извини за это. – DigitalMan

ответ

1

У вас была правильная идея, но я считаю вас сложными вещами. Просто проверьте явно, если первый символ равен x (как и у вас), и только приращение count в этом случае. Независимо от того, было ли оно или не было, по-прежнему рекурсии на:

public static int countX(String str) { 
    int count = 0; 

    if (str.length() > 0) { 
     if (str.substring(0, 1).equals("x")) { 
      ++count; 
     } 

     str = str.substring(1, str.length()); 
     count += countX(str); 

    } 

    return count; 
} 
+0

Это прекрасно работает. Благодарю. Извините, у меня еще нет права голоса. – DigitalMan

+0

@ DigitalMan рад помочь. Обратите внимание, что если это правильный ответ, вы можете принять его (щелкнув знак «проверить» в соответствии с оценкой ответа) независимо от вашей репутации. – Mureinik

1

Предположим, у вас есть строка "axbxcx". Приведенный ниже код выглядит только с первым символом в строке и определяет, является ли это x. Если да, то верните 1 в дополнение к числу x, найденному в остальной части строки. Если первый символ не является x, то число x в строке равно числу x в строке, не содержащей первый символ, так что это то, что возвращается.

int count(String s) 
{ 
    if (s.length() == 0) // base case 
    { 
     return 0; 
    } 

    if (s.charAt(0) == 'x') 
    { 
     return 1 + count(s.substring(1)); 
    } 
    else 
    { 
     return count(s.substring(1)); 
    } 
} 
0

Вы должны попробовать это (это предполагает, что вы проверяете вне метода, начальное значение Обл не нуль и имеет длину больше, чем 0).

public int countX(String str) { 
     if (str.length() == 1) { 
     return ("x".equalsTo(str) ? 1 : 0); 
     } else { 
     return (str.charAt(0) =='x' ? 1 : 0) + countX(str.substring(1,str.length()) 
     } 

    } 
+0

спасибо за наблюдение. Я исправляю его – iullianr

0

Как насчет этого?

public static int countX(String str) { 

    if (str.length() == 0) { 
     return 0; 

    } 

    if (str.substring(0, 1).equals("x")) { 
     return 1 + countX(str.substring(1)); 
    }   

    return countX(str.substring(1)); 
} 
0

Вот простой способ сделать это.

Сначала проверьте, пуста ли строка. Это конечное условие рекурсии.

Тогда ваш результат просто счетчик для первого символа (1 или 0), добавляли к числу для остальной части строки (рассчитывается путем вызова вашей функции на substring(1)).

public static int countX(String str) { 
    if (str.isEmpty()) { 
     return 0; 
    } 
    return (str.charAt(0)=='x' ? 1 : 0) + countX(str.substring(1)); 
} 
Смежные вопросы