プログラミング入門II 宿題 2025.05.28

Back


再帰を使って指数関数 exp(x) の値を以下に示す Euler の公式を用いて計算してみましょう.

x の値としては乱数により発生させた 5 から 10 までの整数のどれかとします.また,Euler の公式のどの次数 n まで計算するかですが,10 から 50 まで 10 刻みとします.

比較のために使用する実際の exp(x) の値は math モジュールに exp 関数が用意してありますので, math モジュールをインポートしておけば math.exp(x) で計算できます.今回は階乗計算と Euler の式の計算の2つを再帰関数としてください.

Student number: s246099

exp(8) = 2980.9579870417283

Approximation of exp(8) by Euler fomula
10: 2432.12126984127
20: 2980.6778726686925
30: 2980.957985441033
40: 2980.9579870417274
50: 2980.957987041728

------------------------

漸化式を考えるとわかりますが,n 次までの和は n - 1 次までの和とどういう関係にあるかを考えてください.
解答用紙を使用する際には,学生番号と名前の記入も忘れないでください.さらに,解答用紙自体がPythonのプログラムとなっていますので,実行してエラーの無いことを確認してから提出してください.

指定の解答用紙を使用していない,実行時にエラーが出る,学生番号と名前が無い,というような答案は提出されても採点しません.注意してください.


解答例

# #############################
#
# プログラミング入門II 宿題 2025.5.28
# 学生番号:  s246099
# 氏名:     松江 花子
#
# #############################

import random
import math

print('Student number: s246099')
print()

def factorial(n):
    if n > 0:
        return n * factorial(n - 1)
    else:
        return 1

def euler(n, x):
    if n == 0:
        return 1
    else:
        return euler(n - 1, x) + x ** n / factorial(n)

x = random.randint(5, 10)

print(f'exp({x}) = {math.exp(x)}')

print(f'\nApproximation of exp({x}) by Euler fomula')

for n in range(10, 60, 10):
    print(f'{n:2}: {euler(n, x)}')

print('\n------------------------\n')


Back