• ベストアンサー

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); } }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

aがdoubleなら、 scanf("%d %d", &a, &b); ではなくて scanf("%lf %d", &a, &b); ではないでしょうか?

その他の回答 (2)

  • ency
  • ベストアンサー率39% (93/238)
回答No.3

differentiate() の戻り値は return n*(n-1)*differentiate( n-1, m-1 ); ではありませんか?

kussetsu
質問者

お礼

double型の変数指定を理解していなかったようです。 ちゃんと指定したらうまく動きました。 ありがとうございます。

回答No.1

素朴な疑問 differentiate(double n, int m); と int a, b; differentiate(a, b)); で、1番目の引数の型が違ってますけど。intなんですかdoubleなんですか?

kussetsu
質問者

補足

ごめんなさい、間違えました。 aがdoubleで、bがintです。 ちなみに最後のreturnのところも、n * differentiate(n-1,m-1) です。

関連するQ&A