Nwlapcug.com


Problemi di ricorsione in Java

Problemi di ricorsione in Java


In un programma Java, un metodo ricorsivo è un metodo che chiama se stessa. Metodi ricorsivi possono aiutare i programmatori per progettare una porzione di codice per semplificare un problema. Metodi ricorsivi anche spesso sembrano essere conciso, ma la creazione di una funzione ricorsiva efficace può essere molto impegnativo. Come con loop e altre strutture di controllo in Java, gli sviluppatori devono lavorare attraverso che cosa accadrà quando viene eseguita una funzione ricorsiva. Metodi ricorsivi provocano una serie di problemi comuni quando non correttamente strutturato.

Problema risoluzione dei guasti

I programmatori utilizzare metodi ricorsivi per risolvere problemi particolari. Naturalmente un metodo ricorsivo non fornirà funzionalità utili, se non risolve il problema per che è stato progettato. A volte questo accade quando il programmatore ha scelto di utilizzare una funzione ricorsiva a cui non è opportuno. In genere, un metodo ricorsivo è ideale per situazioni in cui è necessario risolvere un problema utilizzando procedura iterativa. Ogni volta che il metodo viene eseguito, dovrebbe rendere più semplice il problema e portare il vostro programma un passo più vicini a risolverlo. Il risultato finale del metodo ricorsivo dovrebbe essere la soluzione al tuo problema, ad esempio individuazione di un elemento in un oggetto di raccolta di dati.

Nessun caso di fine

In ordine per una funzione ricorsiva lavorare senza ottenere il vostro programma bloccato in un ciclo infinito, deve avere un caso di fine ben definito. Questo significa che ci deve essere un finale di esecuzione, anziché il metodo esecuzione all'infinito. I programmatori spesso implementano questo utilizzando istruzioni condizionali all'interno del metodo, come nell'esempio seguente:
() {public void doItRecursively (int num)
if(num<1) di ritorno;
else {
System.out.println(num);
doItRecursively(num/2);
}}

Per chiamare questa funzione, un programma può utilizzare il codice riportato di seguito:
doItRecursively(10);

In questo caso la funzione eseguirà cinque volte, uscendo sulla Quinta iterazione. Ogni volta che viene eseguito il metodo si avvicina allo scenario di fine, che il condizionale se istruzione verifica per. Se il metodo non contiene l'istruzione condizionale, esso sarebbe iterare all'infinito.

Senza ricorsione

Il problema del contatore per un metodo iterativo all'infinito loop è un metodo che non scorrere a tutti. Questo succede anche quando l'istruzione condizionale non è strutturata correttamente. Ad esempio, dato il metodo "doItRecursively", di seguito alterato se istruzione potrebbe causare un problema:
if(NUM>0) di ritorno;

Se il metodo viene chiamato solo con valori integer positivo come parametro, suo contenuto mai si ripete come il punto finale sarà stato raggiunto subito.

Chiamate di metodo non corretto

Se il programmatore chiamando un metodo ricorsivo non hanno una chiara comprensione della sua funzione, si può utilizzare in un modo che causa la ripetizione infinite o nessuna ripetizione. Ad esempio, il seguente codice condizionale alterato all'interno del metodo facilmente potrebbe essere chiamato in modo non corretto:
if(num<0) di ritorno;

Se il metodo viene chiamato solo con valori di parametro integer positivo, esso non potrà mai raggiungere questo punto finale e causerà un ciclo infinito. Metodi ricorsivi possono causare molti dei trabocchetti stessi come loop, quindi necessitano di pratica per un'efficace attuazione.