
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);
}
ありがとうございます!!
式はe=1+1/1!+1/2!+1/3!…1/n!
という式です!
自分でnの値は自分でscanfして入力します。
BLUEPIXYさんの式でやってみたところ、17あたりで自然対数の値が2.71828182845・・・を超えてしまいます。自分のやり方が違っていたらすみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# プログラム内から、MIDIファイルの一部分だけを再生する方法 1 2023/02/15 11:08
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- デスクトップパソコン 「自動修復でPCを修復できませんでした」と表示されPCが起動しないのですが対処法はありますか? 5 2022/05/13 09:16
- C言語・C++・C# c言語 1 2022/11/09 13:05
- その他(プログラミング・Web制作) パイソンのプログラミングについての質問です 2 2023/05/22 12:39
- C言語・C++・C# c言語で自然数nを入力、2以上n以下の偶数の累積sumを求めるプログラムをfor文を使って作りたいで 4 2022/11/09 14:10
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- 統計学 確率統計の問題です。 3 2022/04/07 04:39
- 数学 高校の不等式の問題です! n<7分の16を満たす最大の自然数を求めてn=2となっていますが、この、最 5 2022/05/03 14:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語を実行すると-infが出てき...
-
プログラムでの数字につく”f”の...
-
c言語で、繰り返し文の中で、0....
-
doubleの変数にintとintの割り...
-
ボール同士の衝突
-
2分法で方程式の複数の解を自...
-
至急です! マクロ定義で #defi...
-
C 開放してるのにエラー(doubl...
-
プログラミングについて
-
C言語のプログラムで#include<m...
-
-1.#IND00と出てしまうのですが...
-
C言語の型による処理速度の違い
-
C言語のデバック 領域の二重解...
-
-1.#IND00 をデバッグしたい
-
関数プロトタイプ無しで、引数...
-
C言語のpow関数の不具合
-
上三角行列の解を出力するプロ...
-
double型をfloat型に強制変換
-
c言語のプログラミングについて...
-
fgets()による繰り返し入力(c言語)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
float型とdouble型の変数の違い...
-
C言語を実行すると-infが出てき...
-
C 開放してるのにエラー(doubl...
-
c言語で、繰り返し文の中で、0....
-
doubleの変数にintとintの割り...
-
至急です! マクロ定義で #defi...
-
C言語の型による処理速度の違い
-
C言語 関数プロトタイプ宣言の...
-
2次方程式の解を求めるプログ...
-
関数におけるif文とreturn文に...
-
doubleは常に%lfとするべきなのか
-
int とdoubleの比較
-
C言語のプログラムで#include<m...
-
C言語で-23乗を取り扱うには
-
データ数の多い構造体配列
-
指数の表示
-
C言語のpow関数の不具合
-
c言語のプログラミングについて...
-
c言語のコンパイルエラー canno...
おすすめ情報