No.4ベストアンサー
- 回答日時:
>自然対数の底
なるほど、
とりあえずサンプルとなるようなプログラムを呈示するのは、(実用になるかはともかく^^;)簡単ですが、質問の大意は、再帰を使った和の求め方だったと思うので、#1が参考になるかとと思います。
e=1+1/1!+1/2!+1/3!…1/n!
で、能率を考えなければ
n!=fact(n)で既に求めることができるのだから
e=1+Σ[k=1からnまでの和]1/fact(n)
f(n)=1/1!+1/2!+1/3!…1/n!
ですが、とりあえず、f(n)という関数が定義できたとすると、
f(n)=f(n-1)+1/n!
というのがわかると思います。
要するにn-1番目までの和が既に求まっていれば、
n番目までの和は
n-1番目までの和+n番目の数になります。
要するに、このf(n-1)の部分が再帰呼び出しということになります。
f(n-1)は、
f(n-1)=f((n-1)-1)+ 1/(n-1)!で
f(n-1-1-1…)となっていきますが、
n=1でこれ以上前には戻れなくなるので、値が1に決定し、逆に(後ろに戻って)全体の値が決定することになります。
なので、再帰的な関数では、まず終了条件によって値が確定し返すことを書いてから、終了しないときは、再帰的に(問題を小さくして)呼び出します。
つまり、
double f(int n){
if(n==0)return 0;
return 1.0/fact(n)+f(n-1);
}
のような形になります。
この場合
e=1+f(n);
実際には、計算の精度や能率を考慮しないといけません。
No.3
- 回答日時:
答え書いてしまうのも、どうかと思いますので、とりあえず、私の場合の考え方だけ。
------------------------------------------------
n=0: f(0) = 1
n=1: f(1) = 1 + 1/1! = f(0) + 1/1!
n=2: f(2) = 1 + 1/1! + 1/2! = f(1) + 1/2!
n=3: f(3) = 1 + 1/1! + 1/2! + 1/3! = f(2) + 1/3!
……
よって、次のように書けそうだ。
n>=1 の場合 f(n) = f(n-1) + 1/n!
n=0 の場合 f(0) = 1
------------------------------------------------
あとは、これは再帰の形でプログラムしてみれば良いと思います。
# はずしていたら、ごめんなさい。。。
# n! の部分は、作成済みの階乗の関数を流用すれば良いと思います。
## ここまでいったら、ほぼ回答してしまっているのと同じかもしれませんね。
まずは、こんな感じでいかがでしょうか?
No.1
- 回答日時:
math.h
log()
を使いましょうって
再帰にする理由がよくわからないのですが、
多分級数表現をプログラムするということなのでしょうが、どういう式を、どういうふうにプログラムしようとしているのですか?
まあ、こんな感じかな?
#include <stdio.h>
#include <math.h>
double add(double x, int k){
int n=2*k-1;
if(k==0)return(0.0);
return(pow((x-1)/(x+1), n)/n + add(x, k-1));
}
void main(){
double x=5.0;
x=add(x,20)*2.0;
printf("f(5.0)≒%f\n",x);
}
この回答へのお礼
お礼日時:2005/04/19 14:20
ありがとうございます!!
式はe=1+1/1!+1/2!+1/3!…1/n!
という式です!
自分でnの値は自分でscanfして入力します。
BLUEPIXYさんの式でやってみたところ、17あたりで自然対数の値が2.71828182845・・・を超えてしまいます。自分のやり方が違っていたらすみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
float型とdouble型の変数の違い...
-
関数へのポインタで
-
数値解シミュレーション
-
C# 引数の型 自由
-
C言語でintをdoubleに
-
コンパイルした時に表示されません
-
正規分布の乱数生成
-
浮動小数点の誤差のあわせ方
-
float と double
-
MATLABで画像のヒストグラムを...
-
「割り算」 と 「分数の掛け算」
-
C# 割合の記述について
-
C言語初心者 構造体 課題について
-
C言語の複素数についてです。
-
C言語のマクローリン展開ローラ...
-
2÷3などの余りについて
-
信頼区間の1.96や1.65ってどこ...
-
std::set<int> で、ある値が何...
-
「Aに対するBの割合」と「Aに対...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
doubleの変数にintとintの割り...
-
c言語で、繰り返し文の中で、0....
-
C 開放してるのにエラー(doubl...
-
C言語を実行すると-infが出てき...
-
float型とdouble型の変数の違い...
-
至急です! マクロ定義で #defi...
-
C言語の型による処理速度の違い
-
関数におけるif文とreturn文に...
-
C言語 関数プロトタイプ宣言の...
-
浮動小数点の定数
-
int とdoubleの比較
-
doubleは常に%lfとするべきなのか
-
difftime()について
-
C言語でdouble型の小数点の引き...
-
たくさんの数の平均を求める方...
-
斜辺と角度て底辺と高さを出したい
-
C言語で台形公式を使った二重積...
-
float?数字の後にLがつくもの
-
listに構造体を格納
おすすめ情報