A idéia principal da recursividade é que você só poderá resolver tudo quando o ultimo for resolvido então valos lá:
Primeiro loop 1+ (4-1)
segundo loop 1+(3-1)
terceiro loop 1+(2) Nesse momento a função não é mais chamada e agora a função começa a resolver
Agora a função vem agindo de baixo para cima
Primeiro loop 1+ (4-1) 1+4 = 5 retorna 5
segundo loop 1+(3-1) 1+3 = 4 retorna 4
terceiro loop 1+(2) 1+2 = 3 retorna 3
pq o terceiro loop retorna 1+(2) ?
sendo que ele entra no if e retorna k, nas minhas contas ficaria
1º loop _ +1 (4-1)
2º loop _ + 1 (3-1)
3º loop retorno 2
if(k== 2) return k;
2º loop 2+1
1º loop 3+1
== 4 // esse seria o resultado
rodem o cód aqui que vai dar 4 tbm
https://www.tutorialspoint.com/compile_java_online.php
public class HelloWorld{
public static void main(String []args){
System.out.println("Hello World");
System.out.println("saida final " + calc(4));
}
static int calc(int k) {
if(k == 2) {
System.out.println(k);
return k;
} else {
System.out.println(k);
return calc(k - 1) + 1;
}
}
}
SAÍDA
Hello World
4
3
2
saida final 4