Crie uma função soma_harmonica(x) que calcule recursivamente a soma harmônica de x-1 elementos. O único parâmetro da função é x>= 1. (Python)
Sendo soma_harmonica(x) = 1/x + soma_harmonica(x-1)
Soluções para a tarefa
def soma_harmonica(x):
.....if x<1:
..........return 'Não podemos calcular s soma harmônica para x < 1'
.....elif x<2:
..........return 1
.....else:
..........return((1/x) + soma_harmonica(x-1))
num = int(input('Digite o valor de x: '))
print(soma_harmonica(num))
Obs.: Os pontos que precedem as linhas de programação não fazem parte do programa e devem ser desconsideradas, foram adicionados apenas para garantir a indentação do código no site.
Comentários:
--> Note que a condição "if x<1" foi colocada para garantir que não ocorra uma divisão por 0 (exceção) e também para limitar "x" a números positivos, já que a soma harmônica se dá para x≥1 . No entanto, caso seja garantida a correta utilização do programa, podemos retirar essa condição.
--> Quando temos "x≥2", temos a recursividade. Note que estamos somando o valor de 1/x com o resultado de soma_harmonica(x-1). Por sua vez, soma_harmonica(x-1) é feita a soma de 1/(x-1) com o resultado de soma_harmonica(x-2) e assim sucessivamente. Isso acontece até que seja chamada a soma_harmonica(1), quando retornamos o valor 1.
--> Foi deixado também um programa "principal" para testar a função (ultimas duas linhas), perguntando ao usuário o valor de "x" e mostrando na tela o valor da soma_harmonica para (x-1) termos.
Abaixo um exemplo do que acontece para x=3.
É importante destacar que a soma acontece na ordem que foi colocada (1 + 1/2 + 1/3 + 1/4) pelo modo como construímos a função de recursividade, ou seja, quando chegamos à soma_harmonica(1), há o retorno do valor 1 para a soma_harmonica(2) e assim sucessivamente até o ultimo termo.