2016-02-27 3 views
0

Мне нужно использовать рекурсию для реализации логического метода. Никакой какой-либо цикл не допускается. Код, который я написал, получается правильным ответом. Однако это пока неверно. Есть ли хорошие предложения? Благодаря!Java-логический рекурсивный метод для строк Число

public class RecusiveMethod { 

    public static void main (String[] args) { 
     System.out.println("True: " + isWordCountsRight("ccowcow", "cow", 2)); 
     System.out.println("True: " + isWordCountsRight("kayakayakaakayak", "kayak", 3)); 
    } 


    public static boolean isWordCountsRight(String str, String word, int n) { 
     if (n == 0) return true; 

     if (str.substring(0, word.length()).equals(word)) { 
      return isWordCountsRight(str.substring(1), word, n - 1); 
     } 

     return isWordCountsRight(str.substring(1), word, n); 
    } 
} 
+0

Каков ожидаемый результат? –

+0

Ожидаете ли вы 2 или 3 во втором случае? Совпадение с перекрытием или нет? – blafasel

+0

Обратите внимание, что вы никогда не вернете 'false' - предположите, что это ваша проблема здесь – MartinS

ответ

1

Вы также могли бы сделать это следующим образом:

public static boolean isWordCountsRight(String str, String word, int n) { 
if (n == 0) return true; 

int index = str.indexOf(word); 

if (index != -1) { 
    return isWordCountsRight(str.substring(index+1), word, n - 1); 
} else { 
    return false; 
} 
+0

Это не перекрывается. Во втором случае вы получите 2. – blafasel

+0

Вы правы, я слишком жадный, пытаясь спасти потенциально избыточные шаги. Но это простое решение, просто замените word.length() на 1 – Maljam

+0

Спасибо всем вашим предложениям! – xh2000