2012-02-20 4 views
5

Non sono bravo in Java quindi vorrei solo dire in anticipo "QUESTO È IL MIO DOMESTICO" e per favore "NON FARE IL MIO DOMESTICO", questo è il primo compiti a casa sulla ricorsione quindi questa è la mia prima volta Detto questo, queste sono le istruzioni dei miei compiti, ma non sono sicuro dei passi che devo compiere per raggiungere l'obiettivo. Tutto ciò di cui ho bisogno è un bravo ragazzo/ragazza che possa darmi dei buoni dettagli su come finire i miei compiti, una specie di passaggi. Ho letto il libro, ho controllato alcuni siti web sulla ricorsione, ma sento che ho bisogno di un po 'più di aiuto.Ricorsivamente restituisce un array di posizioni in cui si verifica in j

Scrivere un metodo statico ricorsivo che, date due stringhe s e t, restituisce una matrice di tutte le posizioni in cui t si verifica in s. Ad esempio, findLocations ("Frances ran and ran", "ran") restituisce [1, 8, 16].

+1

Questo purtroppo non è un buon esempio per un algoritmo ricorsivo, è molto più semplice utilizzare l'iterazione per ottenere il risultato. Se fosse una lista collegata che si dovrebbe restituire, la ricorsione sarebbe più appropriata, poiché la concatenazione di liste collegate è abbastanza naturale in contrasto con la concatenazione di matrici. –

+0

+1 per aver detto che non vuoi che facciamo la tua h/w per te. Ma non siamo un sito di appuntamenti ... "tutto ciò di cui ho bisogno è un bravo ragazzo/ragazza" ... = P In ogni caso, se una delle risposte ti ha aiutato con il tuo problema, dovresti probabilmente cliccare sul segno di spunta sotto quella risposta (o la risposta che ti ha aiutato di più) per contrassegnare la risposta come accettata/ottenere più risposte. – blahman

+0

jajaja che è stato divertente non sono sicuro se dovrei segnalarlo come offensivo. –

risposta

4

avrei probabilmente affrontare in questo modo:

  1. Date le argumets inputString e substring, chiamare index = inputString.indexOf(substring).

  2. Se il substring è non trovato (index = -1), è necessario restituire la matrice vuota (new int[0]), dal momento che non occorrenze della stringa esiste nel inputString.

  3. Altrimenti il ​​substringfa esiste, nel qual caso si dovrebbe effettuare le seguenti operazioni:

    1. Ottenere l'array di indici per la parte restante della stringa, usando qualcosa come arr = findLocations(inputString.substring(index+1), substring)

    2. Regolare gli indici in arr aggiungendo index a ciascun elemento.

    3. ritorno index, concatenato con arr.

+0

Va bene, sembra che quello che avevo in mente come aiuto. Grazie Sig. –

1

Il modo ricorsione funziona è che di solito è fatto con un metodo di controllo, e poi un metodo di azione. Il metodo di controllo tiene la chiamata ricorsiva (questa è chiamata ricorsione di coda). Utilizzare la ricorsione della coda per risolvere questo problema molto probabilmente coinvolgerebbe una finestra scorrevole. Questo sito ha alcune buone informazioni su ricorsione in Java: http://www.danzig.us/java_class/recursion.html

Nota: Ci dispiace, ma per iscritto alcuni pseudo sono venuto a produrre questo codice. Mi piace molto la ricorsione. L'ho lasciato qui sloppily modo che se si desidera vederlo, forse come un controllo in seguito è possibile formattare

findLocations ArrayList pubblica (obiettivo archi, finestre stringa) { posizioni ArrayList = new ArrayList(); return (recurseLocations (target, window, 0, locations)); }
public ArrayList recurseLocations (destinazione stringa, finestra stringa, offset int, posizioni ArrayList) { if (window.length + offset < target.lunghezza) luoghi di restituzione; bool hit = true; per (int i = 0; i < window.length; i ++) if (target.charAt (i + offset)! = Window.charAt (i)) hit = false; se (colpito) locations.add (offset); recurseLocations (target, window, (offset + 1), posizioni); }

+0

Sì, ho già letto quel sito, dato che stavo aspettando una risposta. Grazie per il link e, naturalmente, il codice che mi aiuterà a capire meglio questo argomento per l'esame. –

1

Come si sarà recursing attraverso la prima stringa e aggiungendo attivamente indici, mi consiglia di utilizzare qualcosa di mutevole, come ad esempio un elenco.

Per quanto riguarda il metodo ricorsivo, ecco alcuni suggerimenti:

// 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. 

Spero che questo ha un senso. Come tu chiaramente vuoi affrontare da solo la maggior parte di questo problema, ho cercato di includere il minor numero possibile di codice. Ho incluso la firma del mio metodo come spero che questo ti indicherà la giusta direzione.

+0

Grazie, apprezzo il tuo tempo e il tuo aiuto. –

Problemi correlati