Boa noite!
Eu estou resolvendo uma série de exercícios de recursividade em Java e estou com dificuldades em dois exercícios, são simples, mas não consegui resolver, inclusive aceito conteúdos que me ajudem nos estudos também.
Gostaria de ajuda para solucionar, e entender as soluções, estou começando os estudos no tópico os exercícios contém alguns critérios, fazendo sem tais critérios eu mesmo já consegui resolver:
Ex) Temos vários coelhos e cada coelho tem duas orelhas grandes e flexíveis. Queremos calcular o número total
de orelhas em todos os coelhos de forma recursiva (sem loops ou multiplicação). Criar uma função recursiva que
receba um número N representando o número de coelhos e retorne a número total de orelhas.
Exemplos:
orelhasCoelho(0) → 0
orelhasCoelho(1) → 2
orelhasCoelho(2) → 4
Ex) Temos triângulos feito de blocos. A linha superior tem 1 bloco, a próxima linha abaixo tem 2 blocos, a
próxima linha tem 3 blocos e assim por diante. Criar uma função recursiva que calcule (sem loops ou multiplicação)
o número total de blocos em um triângulo com o número especificado de linhas.
Exemplos:
triangulo(0) → 0
triangulo(1) → 1
triangulo(2) → 3
Cada coelho, 2 orelhas.
Nenhum coelho, nenhuma orelha.
A ideia é contar os coelhos, decrementando a quantidade a cada chamada recursiva. Para cada coelho contado (cada vez que decrementar) são somadas duas orelhas. A base da recursão é quando acabarem os coelhos (0 coelhos, 0 orelhas).
public static int orelhasCoelho( int q ) {
if ( q == 0 ) { // acabaram os coelhos
return 0; // não há orelhas
}
// ainda há coelhos
// invoca o método novamente, passando um coelho a menos e soma 2
// que são as duas orelhas do coelho atual
return orelhasCoelho( q-1 ) + 2;
// poderia ser tbm
//return 2 + orelhasCoelho( q-1);
}
Para o triângulo, primeiro identifique o padrão:
- 0 linha, nenhum bloco
- 1 linha, 1 bloco (0 + 1)
- 2 linhas, 3 blocos (0 + 1 + 2)
- 3 linhas, 6 blocos (0 + 1 + 2 + 3)
- 4 linhas, 10 blocos (0 + 1 + 2 + 3 + 4)
- 5 linhas, 15 blocos (0 + 1 + 2 + 3 + 4 + 5)
Veja: é um somatório de uma PA que o primeiro termo é 0 e que tem razão igual a 1. Novamente, a base da recursão é zero, tal como o exemplo do coelho. O que vai mudar é a soma sucessiva gerada pelas chamadas recursivas. Pensa ai um pouco que vc conseguirá resolver.
3 curtidas
Obrigado David, realmente me ajudou muito a entender tanto o exercício dos coelhos, como do triangulo e consegui prosseguir, realmente preciso treinar bastante a minha lógica, se tiver indicação de algum livro com o tema, ou até uma lista de exercícios, agradeceria muito.
Abraço
1 curtida
Ainda aprendendo a usar a plataforma, lhe respondi acima, obrigado
1 curtida
Veja minha playlist de aulas da disciplina de Construção de Algoritmos e Programação (em C) que estou lecionando esse semestre: https://www.youtube.com/playlist?list=PLqEuQ0dDknqXH07EkiRo40vVGVyWZQb_-
A última aula é sobre recursividade. Lá explico algumas coisas e simulo a execução. Na descrição dos vídeos há um link com uma pasta compartilhada do meu material. Lá tem a minha coletânea de exercícios e o capítulo 14 é sobre recursividade.
1 curtida
Obrigado, com certeza irei assistir as aulas!
Abraço
1 curtida