Conteúdo principal
Ciência da Computação
Curso: Ciência da Computação > Unidade 1
Lição 6: Algoritmos recursivos- Recursividade
- A função fatorial
- Desafio: Fatorial iterativo
- Fatorial recursivo
- Desafio: Fatorial recursivo
- Propriedades de algoritmos recursivos
- Usando recursividade para determinar se uma palavra é um palíndromo
- Desafio: A string é um palíndromo?
- Calculando a potência de um número
- Desafio: Potência recursiva
- Recursão múltipla com o triângulo de Sierpinski
- Melhorando a eficiência das funções recursivas
- Projeto: Arte recursiva
© 2023 Khan AcademyTermos de usoPolítica de privacidadeAviso de cookies
Calculando a potência de um número
Embora o JavaScript possua uma função
pow
que calcula as potências de um número, você pode escrever uma função semelhante recursivamente, e ela pode ser muito eficiente. O único problema é que o expoente tem que ser um número inteiro.Suponha que você queira calcular x, start superscript, n, end superscript, onde x é qualquer número real e n é qualquer número inteiro. É fácil se n é 0, já que x, start superscript, 0, end superscript, equals, 1 não importa o que x seja. Esse é um bom caso de base.
Então agora vamos ver o que aconte quando n é positivo. Vamos começar falando que quando você multiplica as potências de x, você soma os expoentes: x, start superscript, a, end superscript, dot, x, start superscript, b, end superscript, equals, x, start superscript, a, plus, b, end superscript para qualquer base de x e qualquer expoente de a e b. Portanto, se n é positivo e par, então x, start superscript, n, end superscript, equals, x, start superscript, n, slash, 2, end superscript, dot, x, start superscript, n, slash, 2, end superscript. Se você tivesse que calcular y, equals, x, start superscript, n, slash, 2, end superscript recursivamente, então você poderia calcular x, start superscript, n, end superscript as y, dot, y. E se n for positivo e ímpar? Então x, start superscript, n, end superscript, equals, x, start superscript, n, minus, 1, end superscript, dot, x, e n, minus, 1 ou é 0 ou é positivo e par. Nós acabamos de ver como calcularpotências de x quando o expoente for 0 ou for positivo e par. Portanto, você poderia calcular x, start superscript, n, minus, 1, end superscript recusivamente, e então usar esse resultado para calcular x, start superscript, n, end superscript, equals, x, start superscript, n, minus, 1, end superscript, dot, x.
E quando n for negativo? Então x, start superscript, n, end superscript, equals, 1, slash, x, start superscript, minus, n, end superscript e o expoente minus, n é positivo uma vez que ele é negação de um número negativo. Então você pode calcular x, start superscript, minus, n, end superscript recursivamente e tomar a sua recíproca.
Colocamndo essas observações juntas, nós temos os seguintes algoritmos de calculos recursivos x, start superscript, n, end superscript:
- O caso base é quando n, equals, 0, e x, start superscript, 0, end superscript, equals, 1.
- Se n é positivo e par, calcule recursivamente y, equals, x, start superscript, n, slash, 2, end superscript, e então x, start superscript, n, end superscript, equals, y, dot, y. Note que você pode conseguir utilizar apenas uma chamada recursiva nesse caso, calculando x, start superscript, n, slash, 2, end superscript apenas uma vez, e então você multiplica o resultado dessa chamada recursiva por ele mesmo.
- Se n é positivo e ímpar, calcule recusivamente x, start superscript, n, minus, 1, end superscript, até que o expoente seja 0 ou positivo e par. Então, x, start superscript, n, end superscript, equals, x, start superscript, n, minus, 1, end superscript, dot, x.
- se n for negativo, calcule recursivamente x, start superscript, minus, n, end superscript, até que o expoente se torne positivo. Então, x, start superscript, n, end superscript, equals, 1, slash, x, start superscript, minus, n, end superscript.
Este conteúdo é uma colaboração entre os professores de ciência da computação da Universidade de Dartmouth, Thomas Cormen e Devin Balkcom, juntamente com a equipe do currículo de computação da Khan Academy. O conteúdo é licenciado CC-BY-NC-SA.
Quer participar da conversa?
Nenhuma postagem por enquanto.