解決済みの質問
あくまで一例です。XXXXの部分が再帰呼び出しをする箇所です。
考えてみて下さい。
/* 第n項まで展開して sin(x) を求める */
dboule sin(double x, int n) {
if ( n == 1 ) {
return x;
if (n%2 == 1) {
return XXXX;
} else {
/* n%2 == 0 */
return XXXX;
}
}
投稿日時 - 2006-05-27 03:10:22
補足
最後のXXXXは0ですよね?
最初のXXXXは、
(pow(x,n)/(n * sin(n-1)))
ですか??
n=1から、4項おきに-になると思うんですが、それがうまく表現できません(>_<)
投稿日時 - 2006-05-27 13:00:37
1人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(4件中 1~4件目)
残念ですが、2つとも不正解ですね。
main関数の最後が、、
printf("sin_10=%10.9f\n", sin(x,10));
だとしたら、これでは正しい答えは出力されませんよね?
この sin 関数はそういう使い方を想定しています。
投稿日時 - 2006-05-27 15:01:08
お礼
1つですることはどうしても出来なかったので、2つにしてみました!
double f(int n, int i, double x)
{
if (n<=1){
return (1);}
else{
return (1 - x * x / i / (i+1) * f(n-1, i+2, x));}
}
double sinx(int n, double x)
{
return f(n, 2, x) * x;
}
printf("sin_10=%10.9f\n", sin(x,10));
も
printf("sin_10=%10.9f\n", sin(n,x));
ですねっ(>_<)
ありがとうございました!!
投稿日時 - 2006-05-28 12:25:04
再帰呼び出し、マクローリン展開以前に・・・
提示されたプログラムにはおかしなところがたくさんあります。
コンパイル通ったのでしょうか?
1.main 内の変数 i が初期化されていません。
2.main 内の変数 n を初期化されていますが、以後使われていません。
3.main 内からsin関数を呼び出していますが、この結果が使われていません。
4.sin関数の中からsin関数を呼び出していますが、引数の数が不一致です。
ただわからない、わからない、といわれてもどのへんがどうのようにわからないのか説明しないと、他の方も答えられないと思いますよ。
投稿日時 - 2006-05-27 01:21:45
補足
#include<stdio.h>
main()
{
int i,n;
double xb,x,sinx=0,hu;
xb=1.0;
hu=1.0;
n=10;
printf("x(rad)=");scanf("%lf",&x);
for(i=1;i<n;i++){
xb=xb*(x/i);
if(i%2!=0){
sinx=sinx+(hu*xb); hu=hu*(-1.0);
}}
if(i%2==0){
printf("sin_10=%10.9f\n",sinx); }
return 0;
}
失礼しました(>_<)
これが、再帰を使わない表現ですよね?
『階乗』を求めるようなものを再帰で表現するのは理解できるのですが、
上のようなものはどこをどう再帰にすれば良いのか良く分からないんです。。
投稿日時 - 2006-05-27 01:50:20
http://okwave.jp/kotaeru.php3?qid=1629031
とか
http://okwave.jp/kotaeru.php3?qid=1035726
あたりが参考になるんじゃないでしょうか
投稿日時 - 2006-05-26 02:48:50
補足
ありがとうございます!
しかし、やはり再帰となると良くわかりません。
もう、めちゃくちゃです…
#include<stdio.h>
double sin(double xb, double x, int i);
main()
{
int i,n;
double xb,x,sinx=0,hu;
xb=1.0;
hu=1.0;
n=10;
printf("x(rad)=");scanf("%lf",&x);
sin(xb,x,i)
if(i%2!=0){
sinx=sinx+(hu*xb); hu=hu*(-1.0);
}
if(i%2==0){
printf("sin_10=%10.9f\n",sinx); }
return 0;
}
double sin(double xb, double x, int i)
{
xb=1.0;
return (xb * sin(xb));
}
投稿日時 - 2006-05-27 00:43:29
OKWaveのオススメ
おすすめリンク