再帰を使って指数関数 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')
|