- ベストアンサー
C言語なんですがうまくうごきません。
X=1においてX^nをm回微分した値を求めるプログラムを作っているのですが、 何度も考えて訂正したりしてるのですが、どこが悪いのかわかりません 再帰関数を使ってます。 デバッグして調べてみてるのですが、うまくいってるようにみえるのですが、最後の値が0になります。 nを大きい値にすると、マイナスになったりするんです。 よくわかりません。 ちなみにnとmは正で、mは10までの数を入力します。 このプログラムの基本形を変えないで問題改善することはできるのでしょうか? わかる人いましたら教えてください。 #include <stdio.h> double differentiate(double n, int m); int main(void) { int a, b; printf("Input 2 number\n"); fflush(stdout); scanf("%d %d", &a, &b); printf( "a = %d\nb = %d\n", a, b ); printf("Answer = %d\n", differentiate(a, b)); return 0; } } double differentiate(double n, int m) { if(m == 1){ return n; }else{ return n * n-1 * differentiate(n-1, m-1); } }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
aがdoubleなら、 scanf("%d %d", &a, &b); ではなくて scanf("%lf %d", &a, &b); ではないでしょうか?
その他の回答 (2)
- ency
- ベストアンサー率39% (93/238)
differentiate() の戻り値は return n*(n-1)*differentiate( n-1, m-1 ); ではありませんか?
- keikyu2101
- ベストアンサー率32% (65/202)
素朴な疑問 differentiate(double n, int m); と int a, b; differentiate(a, b)); で、1番目の引数の型が違ってますけど。intなんですかdoubleなんですか?
補足
ごめんなさい、間違えました。 aがdoubleで、bがintです。 ちなみに最後のreturnのところも、n * differentiate(n-1,m-1) です。
お礼
double型の変数指定を理解していなかったようです。 ちゃんと指定したらうまく動きました。 ありがとうございます。