English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

教程基础Java

Java Controllo dei Flussi

Java Array

Java Orientato agli Oggetti (I)

Java Orientato agli Oggetti (II)

Java Orientato agli Oggetti (III)

Gestione delle eccezioni Java

Java List

Java Queue (Queue)

Java Map Collection

Java Set Collection

Java Input/Output (I/O)

Java Reader/Writer

Altri argomenti Java

Ricorsione Java

In questo tutorial, imparerai le funzioni ricorsive Java e i loro pro e contro.

In Java, chiamare se stessoMetodoChiamato metodo ricorsivo. E questo processo si chiama ricorsione.

Un esempio del mondo fisico è posizionare due specchi paralleli che si guardano a vicenda. Qualsiasi oggetto tra di loro sarà riflettuto ricorsivamente.

Come funziona la ricorsione?

Diagramma di workflow del lavoro ricorsivo Java

Nell'esempio sopra, abbiamo chiamato il metodo recurse() all'interno del metodo main. (chiamata di metodo normale). E nel metodo recurse(), abbiamo chiamato di nuovo lo stesso metodo recurse. Questa è una chiamata ricorsiva.

Per fermare le chiamate ricorsive, dobbiamo fornire alcune condizioni all'interno del metodo. Altrimenti, il metodo verrà chiamato无限次.

Pertanto, utilizziamoif ... else statement(o metodo simile) metodo di terminazione della chiamata ricorsiva interna.

Esempio: calcolo del fattoriale ricorsivo

class Factorial {
    static int factorial(int n) {
        if (n != 0) // condizione di terminazione
            return n * factorial(n-1); // ricorsiva chiamata
        else
            return 1;
    }
    public static void main(String[] args) {
        int number = 4, result;
        result = factorial(number);
        System.out.println(number + " 的阶乘= " + result);
    }
}

Output:

4! = 24

Nell'esempio sopra, abbiamo un metodo chiamato factorial(). Il metodo factorial() viene chiamato dal metodo main(). Utilizza la variabile numerica passata come parametro.

Ecco alcune delle seguenti istruzioni:

return n * factorial(n - 1);

Il metodo factorial() chiama se stesso. All'inizio, il valore di n all'interno di factorial() è 4. Durante la prossima chiamata ricorsiva, 3 viene passato al metodo factorial(). Questo processo continua fino a quando n è uguale a 0.

Quando n è uguale a 0, l'istruzione if restituisce false, quindi restituisce 1. Infine, il risultato accumulato viene passato al metodo main().

Flusso di lavoro del programma di factorial

La seguente figura ti aiuterà a comprendere meglio come eseguire il programma di factorial utilizzando la ricorsione.

Programma di factorial utilizzando la ricorsione

Vantaggi e svantaggi della ricorsione

Quando si effettua una chiamata ricorsiva, viene assegnata una nuova posizione di memoria per le variabili sulla pila. Con il ritorno di ogni chiamata ricorsiva, le variabili e i parametri vecchi vengono rimossi dalla pila. Pertanto, la ricorsione utilizza di solito più memoria e di solito è più lenta.

D'altra parte, la soluzione ricorsiva è molto più semplice e richiede meno tempo per essere scritta, debuggata e mantenuta.