English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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.
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().
La seguente figura ti aiuterà a comprendere meglio come eseguire il programma di factorial utilizzando la 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.