Cara, como estudante, eu ainda tenho um pouco de medo em usar recursão.
Pode me explicar uma coisa?
Pelo que sei, o método recursivo monta uma pilha de instruções, correto?
Digo, para conseguir encontrar o fatorial de 4 (por exemplo), é necessário descobrir o 3!, para descobrir o 3! é necessário descobrir o 2! e assim por diante. Tendo isso em conta, nosso ponto de parada é, por exemplo, n = 1. Nesse ponto de parada, estamos informando ao método, qual o fatorial de 1, uma vez que o if (n == 1) return 1, certo? Então ao atingir este ponto, é como se o método acessasse a pilha de instruções “de baixo para cima”, calculando os fatoriais que restaram. É isso?
S
staroski1 like
Ué, medo do que exatamente?
Mais ou menos isso, após o return, a chamada do método atual é desempilhada, voltando a execução para o método anterior que o chamou.
Então no inicio ele vai empilhar as seguintes chamadas: recursiveM(5) --> recursiveM(4) --> recursiveM(3) --> recursiveM(2) --> recursiveM(1) --> recursiveM(0)
Lá no recursiveM(0) ele fará o return 1 e aí vai retornando a chamada para o recursiveM(1), recursiveM(2), recursiveM(3), recursiveM(4) e finalmente voltar para o método inicial recursiveM(5).
Essa volta, ou o “de baixo pra cima” como você citou, se chama backtracking.
M
matheus.cirillo
Bom, não sei exatamente qual é meu medo, rs. Mas sempre que há algum exercício como este, fibonacci, entre outros, eu prefiro utilizar laços e não métodos recursivos. Sinto que caso use método recursivo, algo dará errado. Talvez por falta de prática, rs.
Quanto a minha dúvida: agora tudo ficou mais esclarecido.
Obrigado!