我必须编写一个递归方法来对整数进行求和。
该方法工作正常,但我不明白为什么它返回最后一个整数而不是总数。
import java.util.Scanner;
public class SommaCifreRicorsivo{
public static void main (String[] args){
System.out.printf("Inserire un numero: ");
Scanner tastiera = new Scanner(System.in);
int numero = tastiera.nextInt();
int somma = 0;
int risultato = eseguiSomma(numero,somma);
System.out.println("La somma delle sue cifre è " + risultato);
}
public static int eseguiSomma(int numero, int somma){
//Caso base
if (numero < 10) {
somma = somma + numero;
System.out.println("Aggiungo la cifra " + numero + " alla somma, ottenendo " + somma);
return (somma += numero);
}
//Chiamate ricorsive
somma = somma + numero%10;
System.out.println("Aggiungo la cifra " + (numero%10) + " alla somma, ottenendo " + somma);
eseguiSomma((numero/10), somma);
return somma;
}
}
答案 0 :(得分:1)
somma
是基本类型(int
),因此Java按值传递它。这意味着您要修改的值只是存储在每个递归调用的堆栈帧中的somma
的副本,而不是最终的返回值。
因此,参数somma
完全没有必要。相反,您应该返回递归调用的返回值加上新的数字。这提供了一个简单得多的解决方案。
public static int eseguiSomma(int numero){
//Caso base
if (numero < 10) {
return numero;
}
//Chiamate ricorsive
return numero % 10 + eseguiSomma(numero / 10);
}
// now simply call without somma
int risultato = eseguiSomma(numero);
答案 1 :(得分:0)
只需将其更正为:
import java.util.Scanner;
public class SommaCifreRicorsivo{
public static void main (String[] args){
System.out.printf("Inserire un numero: ");
Scanner tastiera = new Scanner(System.in);
int numero = tastiera.nextInt();
int somma = 0;
int risultato = eseguiSomma(numero,somma);
System.out.println("La somma delle sue cifre è " + risultato);
}
public static int eseguiSomma(int numero, int somma){
//Caso base
if (numero < 10) {
somma = somma + numero;
System.out.println("Aggiungo la cifra " + numero + " alla somma, ottenendo " + somma);
return (somma += numero);
}
//Chiamate ricorsive
somma = somma + numero%10;
System.out.println("Aggiungo la cifra " + (numero%10) + " alla somma, ottenendo " + somma);
// the error was on this line!
somma += eseguiSomma((numero/10), somma);
return somma;
}
}
您正在尝试修改somma,但是somma是原始类型,因此您只能修改其本地副本,而somma保持不变。