2012-02-20 9 views
5

No soy bueno en Java, así que solo me gustaría decir de antemano "ESTO ES MI TAREA" y por favor "NO HAGO MI TAREA", esta es la primera tarea en recursividad así que esta es mi primera vez. Habiendo dicho eso, estas son las instrucciones de mi tarea, pero no estoy seguro de los pasos que debo seguir para alcanzar el objetivo. Todo lo que necesito es un gran chico/chica que me pueda dar buenos detalles sobre cómo terminar mi tarea, tipo de pasos. He leído el libro, he consultado algunos sitios web sobre la recursividad, pero siento que necesito un poco más de ayuda.Recursivamente devuelvo una matriz de posiciones donde ocurre en j

Escriba un método estático recursivo que, dadas dos cadenas syt, devuelve una matriz de todas las posiciones donde t aparece en s. Por ejemplo, findLocations ("Frances ejecutó y ejecutó", "ejecutó") devuelve [1, 8, 16].

+1

Desafortunadamente, este no es un buen ejemplo para un algoritmo recursivo, es mucho más sencillo usar la iteración para lograr el resultado. Si fuera una lista unida a la que se debería devolver, la recursión sería más apropiada, ya que la concatenación de listas vinculadas es bastante natural en contraste con la concatenación de matrices. –

+0

+1 por decir que no quiere que hagamos su h/w por usted. Pero no somos un sitio web de citas ... "todo lo que necesito es un gran chico/chica" ... = P En cualquier caso, si alguna de las respuestas te ha ayudado con tu problema, probablemente deberías hacer clic en el tic. en esa respuesta (o la respuesta que más te ha ayudado) para marcar la respuesta como aceptada/obtener más representante. – blahman

+0

jajaja que fue divertido No estoy seguro de si debería marcarlo como ofensivo. –

Respuesta

4

que probablemente acercarse a él de esta manera:

  1. Dadas las argumets inputString y substring, llamar index = inputString.indexOf(substring).

  2. Si se no encontró la substring (index = -1), debe devolver la matriz vacía (new int[0]), ya que no hay apariciones de la subcadena existe en el inputString.

  3. lo contrario, el substringsí existe, en cuyo caso se debe hacer lo siguiente:

    1. Obtener el conjunto de índices para la parte restante de la cadena, usando algo como arr = findLocations(inputString.substring(index+1), substring)

    2. Ajuste los índices en arr agregando index a cada elemento.

    3. return index, concatenado con arr.

+0

De acuerdo, parece lo que tenía en mente como ayuda. Gracias, Sr. –

1

La forma en que funciona la recursividad es que generalmente se realiza con un método de control, y luego un método de acción. El método de control contiene la llamada recursiva (esto se llama recursividad de cola). Usar recursividad de cola para resolver este problema probablemente involucre una ventana deslizante. Este sitio tiene buena información acerca de la recursión en Java: http://www.danzig.us/java_class/recursion.html

Nota: Lo siento, pero al escribir algunos psuedo llegué a producir este código. Realmente disfruto la recursividad. Lo dejé aquí descuidadamente por lo que si desea ver que tal vez como una comprobación posterior puede darle formato

findLocations ArrayList pública (cadena de destino, ventana cadena) { lugares ArrayList = new ArrayList(); return (recurseLocations (destino, ventana, 0, ubicaciones)); }
público ArrayList recurseLocations (destino de cadena, ventana de cadena, desplazamiento int, ubicaciones de ArrayList) { if (window.length + offset < target.longitud) ubicaciones de retorno; bool hit = true; para (int i = 0; i < window.length; i ++) if (target.charAt (i + desplazamiento)! = Window.charAt (i)) hit = false; if (hit) locations.add (offset); recurseLocations (destino, ventana, (desplazamiento + 1), ubicaciones); }

+0

Sí, ya leí ese sitio web, ya que estaba esperando alguna respuesta. Gracias por el enlace y, por supuesto, el código que me ayudará a comprender este tema aún mejor para el examen. –

1

A medida que se recursiva a través de la primera cadena y la adición de los índices de forma activa, recomendaría el uso de algo mutable, tales como una lista.

En cuanto a su método recursivo, he aquí algunos consejos:

// Initialize results list first 
// Start the search using index = 0 and your empty results list. 
ArrayList<Integer> recurSearch(String input, String search, int index, ArrayList<Integer> results) 

// Inside recurSearch() 
int index = inputString.indexOf(search string, index); 
// Here check the index. If it equals -1, no more matches. Return your result List. 
// If does not equal -1, add to result list and return findLocations() using index + 1. 

Espero que esto tenga sentido. Como claramente desea abordar la mayor parte de este problema usted mismo, traté de incluir el menor código posible. Incluí la firma de mi método porque espero que esto te indique la dirección correcta.

+0

Gracias, le agradezco su tiempo y ayuda. –

Cuestiones relacionadas