Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 수열 1/1! + 2/2! + 3/3! + … + n/n!의 합 구하기

이 글에서는 주어진 문제를 해결하기 위한 풀이 방법과 접근 방식에 대해 자세히 알아보겠습니다.

문제 정의

문제: 정수 n이 입력으로 주어졌을 때, 다음 수열의 합을 구해야 합니다.

1/1! + 2/2! + 3/3! + 4/4! + …… + n/n!

접근 방식

이 문제는 for 반복문을 사용하여 해결할 수 있으며, 이 경우 시간 복잡도는 O(n)이 됩니다.

효율성을 높이기 위해 팩토리얼 계산을 같은 반복문 안에서 함께 처리합니다. 매 반복마다 팩토리얼을 처음부터 새로 계산하는 대신, 이전 단계에서 구한 팩토리얼 값에 현재 숫자 i를 곱하여 누적하는 방식입니다. 이렇게 하면 불필요한 중복 연산을 피할 수 있어 성능이 크게 향상됩니다.

아래와 같이 sumOfSeries 함수를 작성합니다.

예제 코드

def sumOfSeries(num):
    res = 0
    fact = 1
    for i in range(1, num+1):
        fact *= i
        res = res + (i / fact)
    return res

n = 100
print("Sum: ", sumOfSeries(n))

출력 결과

Sum: 2.7182818284590455

위 코드에서 모든 변수와 함수는 아래 그림과 같이 전역 범위(global scope)에 선언되어 있습니다.

파이썬으로 수열 1/1! + 2/2! + 3/3! + … + n/n!의 합 구하기

결론

이 글에서는 파이썬의 반복문 하나만을 사용하여 수열 1/1! + 2/2! + 3/3! + … + n/n!의 합을 O(n) 시간 복잡도로 효율적으로 구하는 방법을 살펴보았습니다.

흥미로운 점은 n이 커질수록 이 수열의 합이 자연상수 e(약 2.71828)에 수렴한다는 사실입니다. 실제로 n = 100일 때의 출력 결과가 2.7182818284590455인 것을 통해 이를 확인할 수 있습니다.