Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Ricorsione | Metodi
Java Avanzato
course content

Contenuti del Corso

Java Avanzato

Java Avanzato

1. Struttura Profonda di Java
2. Metodi
3. String Avanzato
4. Classi
5. Classi Avanzate

book
Ricorsione

Come rompere facilmente il tuo codice?

Perché questo può rompere il codice? Perché può portare a una ricorsione infinita, che consumerà memoria senza fine e ridurrà le prestazioni del dispositivo. Allora perché abbiamo bisogno della ricorsione? In alcuni casi, la ricorsione può essere utile, ma dovrebbe essere utilizzata con cautela. Ad esempio, la ricorsione può sostituire un ciclo while. Vediamo un esempio di utilizzo della ricorsione per calcolare la somma di tutti i numeri fino a un numero passato come parametro:

Main.java

Main.java

copy
1234567891011121314151617181920
package com.example; public class Main { // main method to run the application public static void main(String[] args) { // do not modify the code below System.out.println(calculateSum(5)); } // method to calculate the sum of numbers from 1 to num using recursion static int calculateSum(int num) { // if num is greater than 0, recursively calculate the sum if (num > 0) { num = num + calculateSum(num - 1); } else { return 0; } return num; } }

Il metodo calculateSum() richiama sé stesso con valori ridotti. È presente anche un punto di uscita da questa ricorsione quando la variabile num diventa zero. Questo metodo calcola la somma di tutti i numeri da 1 fino al parametro, nel nostro caso 5. Osserviamo il diagramma di flusso che mostra come funziona la ricorsione utilizzando questo metodo come esempio:

L'esempio sopra dimostra come il metodo richiami sé stesso con valori ridotti e, quando raggiunge zero, risale sommando i valori. Si può anche osservare come venga eseguito il corpo del blocco if, dove si aggiunge num al risultato della chiamata del metodo con un valore ridotto. I valori intermedi dopo ogni chiamata del metodo sono indicati vicino alle frecce.

Possiamo evitare di usare la ricorsione?

La ricorsione può anche essere sostituita con un ciclo normale. Vediamo un esempio in cui prima utilizziamo un metodo ricorsivo e poi un ciclo for per eseguire la stessa operazione:

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233
package com.example; public class Main { // main method to run the application public static void main(String[] args) { // do not modify the code below int num = 5; // printing the result of the recursive sum calculation System.out.println("Result using recursion: " + calculateSum(num)); int result = 0; // calculating the sum using a for-loop for (int i = 1; i <= num; i++) { result = result + i; } // printing the result of the sum calculation using the for-loop System.out.println("Result using for-loop: " + result); } // method to calculate the sum of numbers from 1 to num using recursion static int calculateSum(int num) { // if num is greater than 0, recursively calculate the sum if (num > 0) { num = num + calculateSum(num - 1); } else { return 0; } return num; } }

Qui possiamo vedere come sostituiamo il nostro metodo ricorsivo con un normale ciclo for, utilizzando la variabile i per incrementare il nostro result di i ogni volta fino a raggiungere il numero specificato num, che è il parametro del metodo.

Conclusione

In conclusione, i metodi ricorsivi possono essere utili ma anche rischiosi. La ricorsione può spesso essere sostituita da cicli, e sebbene possa semplificare alcuni compiti, può anche causare problemi se non utilizzata con attenzione. Se si sceglie di utilizzare la ricorsione, anche con esperienza, è importante procedere con cautela.

1. Che cos'è la ricorsione in Java?

2. Qual è meglio utilizzare, la ricorsione o un ciclo regolare?

question mark

Che cos'è la ricorsione in Java?

Select the correct answer

question mark

Qual è meglio utilizzare, la ricorsione o un ciclo regolare?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 7

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

course content

Contenuti del Corso

Java Avanzato

Java Avanzato

1. Struttura Profonda di Java
2. Metodi
3. String Avanzato
4. Classi
5. Classi Avanzate

book
Ricorsione

Come rompere facilmente il tuo codice?

Perché questo può rompere il codice? Perché può portare a una ricorsione infinita, che consumerà memoria senza fine e ridurrà le prestazioni del dispositivo. Allora perché abbiamo bisogno della ricorsione? In alcuni casi, la ricorsione può essere utile, ma dovrebbe essere utilizzata con cautela. Ad esempio, la ricorsione può sostituire un ciclo while. Vediamo un esempio di utilizzo della ricorsione per calcolare la somma di tutti i numeri fino a un numero passato come parametro:

Main.java

Main.java

copy
1234567891011121314151617181920
package com.example; public class Main { // main method to run the application public static void main(String[] args) { // do not modify the code below System.out.println(calculateSum(5)); } // method to calculate the sum of numbers from 1 to num using recursion static int calculateSum(int num) { // if num is greater than 0, recursively calculate the sum if (num > 0) { num = num + calculateSum(num - 1); } else { return 0; } return num; } }

Il metodo calculateSum() richiama sé stesso con valori ridotti. È presente anche un punto di uscita da questa ricorsione quando la variabile num diventa zero. Questo metodo calcola la somma di tutti i numeri da 1 fino al parametro, nel nostro caso 5. Osserviamo il diagramma di flusso che mostra come funziona la ricorsione utilizzando questo metodo come esempio:

L'esempio sopra dimostra come il metodo richiami sé stesso con valori ridotti e, quando raggiunge zero, risale sommando i valori. Si può anche osservare come venga eseguito il corpo del blocco if, dove si aggiunge num al risultato della chiamata del metodo con un valore ridotto. I valori intermedi dopo ogni chiamata del metodo sono indicati vicino alle frecce.

Possiamo evitare di usare la ricorsione?

La ricorsione può anche essere sostituita con un ciclo normale. Vediamo un esempio in cui prima utilizziamo un metodo ricorsivo e poi un ciclo for per eseguire la stessa operazione:

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233
package com.example; public class Main { // main method to run the application public static void main(String[] args) { // do not modify the code below int num = 5; // printing the result of the recursive sum calculation System.out.println("Result using recursion: " + calculateSum(num)); int result = 0; // calculating the sum using a for-loop for (int i = 1; i <= num; i++) { result = result + i; } // printing the result of the sum calculation using the for-loop System.out.println("Result using for-loop: " + result); } // method to calculate the sum of numbers from 1 to num using recursion static int calculateSum(int num) { // if num is greater than 0, recursively calculate the sum if (num > 0) { num = num + calculateSum(num - 1); } else { return 0; } return num; } }

Qui possiamo vedere come sostituiamo il nostro metodo ricorsivo con un normale ciclo for, utilizzando la variabile i per incrementare il nostro result di i ogni volta fino a raggiungere il numero specificato num, che è il parametro del metodo.

Conclusione

In conclusione, i metodi ricorsivi possono essere utili ma anche rischiosi. La ricorsione può spesso essere sostituita da cicli, e sebbene possa semplificare alcuni compiti, può anche causare problemi se non utilizzata con attenzione. Se si sceglie di utilizzare la ricorsione, anche con esperienza, è importante procedere con cautela.

1. Che cos'è la ricorsione in Java?

2. Qual è meglio utilizzare, la ricorsione o un ciclo regolare?

question mark

Che cos'è la ricorsione in Java?

Select the correct answer

question mark

Qual è meglio utilizzare, la ricorsione o un ciclo regolare?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 7
some-alt