##再帰呼び出しを利用してexpのn次近似を得たいです。
lang
1#include <stdio.h> 2#include <math.h> 3double myexp(int, int); 4double divx(int, int); 5 6int main() { 7 int x; 8 int n; 9 double ex; 10 11 printf("xを入力して下さい "); 12 scanf("%d", &x); 13 printf("次数nを入力して下さい "); 14 scanf("%d", &n); 15 16 ex= myexp(x, n); 17 printf("\nexp(%d,%d) =\t%20.15f\n", x, n, ex); 18 printf("exp(%d) =\t%20.15f\n", x, exp(x)); 19 return 0; 20} 21 22double myexp(int x, int n) { 23 double e; 24 if (n == 0)e = 1; 25 else { 26 e = divx(x, n) + myexp(x, n - 1); 27 printf("depth(%3d) : exp(%d) = %20.15f\n", n, x, e); 28 } 29 return e; 30} 31 32double divx(int x, int n) { 33 double e; 34 if (n == 0) return 1; 35 else { 36 e = x / n * divx(x, n - 1); 37 } 38 return e; 39} 40
関数divxが(x^n)/n!を表しています。
関数myexpは項の和です。
###得たい結果
lang
1xを入力して下さい 5 2次数nを入力して下さい 25 3depth( 0) : exp(5) = 1.000000000000000 4depth( 1) : exp(5) = 6.000000000000000 5depth( 2) : exp(5) = 18.500000000000000 6 ... 7depth( 24) : exp(5) = 148.413159078836657 8depth( 25) : exp(5) = 148.413159098050073 9 10exp(5,25) = 148.413159098050073 11exp(5) = 148.413159102576600
###得られた結果
lang
1xを入力して下さい 5 2次数nを入力して下さい 10 3depth( 1) : exp(5) = 6.000000000000000 4depth( 2) : exp(5) = 16.000000000000000 5depth( 3) : exp(5) = 26.000000000000000 6depth( 4) : exp(5) = 36.000000000000000 7depth( 5) : exp(5) = 46.000000000000000 8depth( 6) : exp(5) = 46.000000000000000 9depth( 7) : exp(5) = 46.000000000000000 10depth( 8) : exp(5) = 46.000000000000000 11depth( 9) : exp(5) = 46.000000000000000 12depth( 10) : exp(5) = 46.000000000000000 13 14exp(5,10) = 46.000000000000000 15exp(5) = 148.413159102576600
見やすさとスペースの関係上得られた結果を10で打ち切っていますが、n=25の時も5行目以降は全て46.000で最後の結果も変わりませんでした。
自分なりにいろいろ考えてみたのですが思いつかなかったので、得意な方いらっしゃったら回答よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/23 23:30