quinta-feira, 4 de novembro de 2010

Programação em C - Calcular a potência de um número inteiro

Olá pessoal, nesse post irei comentar um código em C que calcula a potência de um número inteiro.

Sabemos que o módulo math.h contém a função pow() que calcula a potência de um número de acordo com a base e o expoente. Iremos implementar nossa própria função pow() de forma recursiva.

Veja o código abaixo e logo após a explicação:


Veja que na linha 5 temos o início da nossa função que calcula a potência de um número. Essa função possui dois parâmetros: base e expoente.

Se o expoente for 0 a função retorna 1 pois o resultado de qualquer número elevado a 0 é 1. Se o expoente for 1 então o resultado é a base, por exemplo: 2 (base) elevado a 1 (expoente) é igual a 2 (base). Qualquer número elevado a 1 é igual a ele mesmo.

Na linha 12 é feita a chamada recursiva. A base é sempre a mesma, o que muda é o expoente, por isso temos a chamada da função pot() passando (exp - 1).

Por exemplo: 2 (base) elevado a 3 (expoente).

Primeira chamada recursiva: 2 * pot(2, 2)
Segunda chamada recursiva: 2 * pot(2, 1)

pot(2,1) é igual a 2, pois todo número elevado a 1 é igual a ele próprio. Então temos:

2 * pot(2,1) = 2 * 2 = 4

pot(2, 2) = 2 * pot(2, 1). Sabemos que pot(2, 1) é igual a 2, então:

pot(2, 2) = 2 * 2 = 4

Por último, 2 * pot(2, 2) é igual a 2 * 4 = 8

Resultado: 2 elevado a 3 é igual a 8.

Veja o código com a "base" sendo float:


Quaisquer dúvidas deixem nos comentários, até a próxima.



5 comentários:

Anna Brito disse...

cade o codigo?? a imagem nao esta sendo exibida!!

Anna Brito disse...

a imagem nao ta aparecendo, cara! tem como enviar pro meu email?? anninhab07@gmail.com Obrigada!!

admin disse...

Obrigado pelo aviso, código refeito e disponível.

Edio Lodi disse...

Ola!

O codigo nao esta preciso pois se colocar o expoente com decimal nao inteiro ex. 2.5, 3.2... nao dara o resultado correto.

Estou precisando do codigo tambem, caso consiga me ajudar agradeco.

Marcos Castro disse...

Olá amigo, realmente esse código difere da função "pow" original porque a original pode receber parâmetros do tipo double, já essa só recebe parâmetros inteiros. Tentarei fazer um código recebendo parâmetros double assim como a "pow" original, obrigado pelo aviso.