First I’m gonna fix the code:
public class CalculaPotencia {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("Digite um número inteiro para base: ");
int base = scan.nextInt();
System.out.print("Digite um número inteiro para o expoente: ");
int exp = scan.nextInt();
System.out.print("A potência de " + base
+ " elevado a " + exp + " é: " + potencia(base, exp));
}
public static int potencia(int b, int e) {
if (e == 0) return 1;
return potencia(b, e - 1) * b;
}
}
Note that I changed the condition of if. This is important because your original code didn’t know how to handle the case of the exponent being zero.
Let’s see some math:
Let’s take for example, 35:
35 = 3 3 3 3 3 = (3 3 3 3) 3 = 34 3
Note that in this example, we reduce exponentiation by power 5 to an exponentiation by power 4 and a multiplication. That is, we reduce potencia(3, 5) for potencia(3, 4) * 3. Here occurs the recursion.
Going on:
34 = 3 3 3 = (3 3 3) 3 = 33 3
33 = 3 3 = (3 3) 3 = 32 3
32 = 3 3 = (3) 3 = 31 3
31 = 3
In the code, that up there is equivalent to this down here:
35 = 34 3 = potencia(3, 4) 3
34 = 33 3 = potencia(3, 3) 3
33 = 32 3 = potencia(3, 2) 3
32 = 31 3 = potencia(3, 1) 3
31 = 3
I mean, in your stack of calls you have:
potencia(3, 5)
potencia(3, 4)
potencia(3, 3)
potencia(3, 2)
potencia(3, 1)
And this is where your original algorithm stops and returns 3 (the base). And then he starts using the computed result and goes to unpacking those calls from potencia(3, 1) up to the potencia(3, 5):
Result of potencia(3, 1): 31 = 3
Result of potencia(3, 2): 32 = 31 3 = potencia(3, 1) 3 = 3 3 = 9
Result of potencia(3, 3): 33 = 32 3 = potencia(3, 2) 3 = 9 3 = 27
Result of potencia(3, 4): 34 = 33 3 = potencia(3, 3) 3 = 27 3 = 81
Result of potencia(3, 5): 35 = 34 3 = potencia(3, 4) 3 = 81 3 = 243
That is, what the method potencia is to reduce potentiation by e by a multiplication by power e - 1. How this is recursive, potentiation by e - 1 will in turn be reduced to a potentiation by e - 2, which will be reduced by a potentiation by e - 3, until the power is 1.
And because I changed the if to stop at power 0 instead of 1? Because in the case of the exponent being 0, the power output is always 1 and the case of the exponent being 1 is also reduced to a multiplication by the exponent 0 as in the other exponents, producing this:
Result of potencia(3, 0): 1
Result of potencia(3, 1): 31 = 30 3 = potencia(3, 0) 3 = 1 3 = 3