我正在尝试计算C语言中sin(x)的值,但执行后代码:block中出现黑屏,这需要很长时间进行编译和执行。
#include<stdio.h>
float mult(float x, int m, int i) {
float a = x;
if (i == m) {
return x;
} else {
i++;
a = a * mult(x, m, i);
return a;
}
}
int fact(int m) {
printf("%d! ", m); fflush(stdout);
int b;
if (m == 1) {
return 1;
} else {
b = m * fact(m - 1);
return b;
}
}
float term(float x, int m) {
float a = 0, b = 0, c = 0;
int i = 0;
a = mult(x, m, i);
b = fact(m);
c = a / (1.0 * b);
return c;
}
float sinof(float x, int m, int n) {
float b = 0;
if (m >= 10) {
return (0);
} else {
printf("......%d ", m); fflush(stdout);
b = term(x, m);
m = m + 2;
n = -n;
b = b + (n * sinof(x, m, n));
return b;
}
}
int main() {
float x = 0, sin = 0;
int m = 1, n = 1;
printf("Enter the angle in radians:");
scanf("%f", &x);
sin = sinof(x, m, n);
printf("%f", sin);
}
我希望逻辑是正确的。
答案 0 :(得分:1)
m
很奇怪。下面无法停止递归。
if(m==10){ // Never true
return(0);
} else{
b=term(x,m);
m=m+2;n=-n; // ***********
b=b+(n*sinof(x,m,n));
return b;
}
我建议OP首先让自己的代码工作。还有很多其他问题。
要获得简化的递归sine()
,请将鼠标悬停以查看。
静态double my_sin_helper(double xx,double term,unsigned n){
if(term + 1.0 == 1.0){
返回条款;
}
返回项-my_sin_helper(xx,xx * term /(((n + 1)*(n + 2)),n + 2);
}
//对[-pi / 2 + pi / 2]有效
double my_sin_primary(double x){
返回x * my_sin_helper(x * x,1.0,1);
}