は私が定義するいくつかの時点までの特定の合計を与えるプログラムを作成しようとしています「...動作を停止しました」ここにある:再帰関数。 、
float sum(int n,float m);
main(void) {
float a,m=1.0;
int n;
scanf_s("%ld", &n);
a = sum(n, m);
printf("%f", a);
}
float sum(int n, float m) {
if ((n/m) < 0.0005) {
return 0;
}
else {
return n/m + sum(n, m + 2);
}
}
(私は定義されたポイントは0.0005であることに注意してください) Iが大きい又は5に等しい値を与える場合、プログラムは、私は、このエラーを与える:
...has stopped working
Iが0.5を好きに定義されたポイントを増加させる場合も、値の数があまりにも増加を与えることができます。なぜこれが起こっていると思いますか?それをどうやって修正できますか?
可能な重複https://stackoverflow.com/questions/26247345/segmentation-fault-using-scanf-:あなたは反復解法で行くことによってこれを回避することができます整数付き) – Alfabravo
好奇心の高まりから、なぜint型に対して '%ld'(' long int'用)を使用していますか?あなたはそれについてコンパイラからの警告を見ましたか? – lurker
@Alfabravoその質問は適用されません。 OPは、 'scanf_s'呼び出しに対して'&n'を正しく使用しています。 – lurker