O código que eu fiz é o seguinte:
#Função recursiva que calcula a potência de um número real
def pot(x,y):
if y == 0:
return 1
else:
return x * pot(x,y-1)
#Programa principal
x = float(input('Digite um valor para x: '))
y = float(input('Digite um valor para y: '))
print(x, 'elevado a', y, 'é:')
pot(x,y)
Não sei se o código está certo. O professor definiu como função pot(x,y) onde x é base e y expoente. Sei que em Python há o pow(x,y) quando usada a biblioteca "math", mas não tenho certeza se ela deve ser usada neste caso.
Quando eu rodo o programa ele não retorna nenhum valor, nem mesmo quando y = 0.
Nota: usei x*pot(x,y-1) uma vez que x**y = x*x**(y-1) para fazer a recursão a função. udei uma lógica parecida para o caso do fatorial e deu certo e aqui não vai.
------------------------------------
,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia: |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
| E se você é usuário do BOL lembre-se de cadastrar o |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´Links do Yahoo! Grupos
<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br
<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html
print("%f elevado a %f eh: %f" % x, y, pot(x, y))
Faltou mandar exibir o resultado.
Og!
Você não precisa usar pot do módulo math: existe o operador ** em
Python, que faz potenciação.
Uma outra forma recursiva de fazer potenciação com expoentes inteiros,
bem mais eficiente, é esta:
def pot(x, n):
if n == 0:
return 1
y = pot(x, n/2)
if n % 2:
return y * y * x
else:
return y * y
Aqui o expoente vai sendo sucessivamente dividido por 2, então o
número de multiplicações em ponto flutuante realizadas é proporcional
a log(n, 2) e não a n. Ou seja, se o expoente é da ordem de 1000, o
método do seu professor vai fazer umas 1000 multiplicações, enquanto
que o método acima vai fazer umas 10.
Além de mais eficiente, este método é mais preciso, porque operações
com ponto flutuante costumam introduzir imprecisões, então quanto
menos forem realizadas, melhor.
[ ]s
Luciano