我得到消极和积极的结果:当我输入(n值奇数)时,奇数项产生偶数或偶数项产生奇数值。我已经为factorial做了功能,它运行正常。
#include <stdio.h>
#include <math.h>
#define PI 3.14159f
int factorial(int n);
float sine(float , int);
int i;
void main(){
float degree;
float radian;
float result;
int n;
printf("Enter the angle in degree: ");
scanf("%f",°ree);
printf("Enter the iteration: ");
scanf("%d",&n);
radian = degree * PI / 180;
result = sine(radian,n);
printf("%d",factorial(n));
printf("\n");
printf("sin%.2f = %.3f",degree,result);
}
int factorial(int n)
{
if(n==0)
return 1;
else if (n==1)
return 1;
else
return (n*factorial(n-1));
}
float sine(float an, int n)
{
if (an==0)
return 0;
else if(n>=0)
if(n%2==1)
return (sine(an,n-2) - pow(an,n)/factorial(n)) * pow(-1,n);
else
return (sine(an,2*n-1) - pow(an,2*n+1)/factorial(2*n+1)) *-1 ;
}
答案 0 :(得分:1)
#include <iostream>
using namespace std;
int main()
{
char ch;
while (cin >> ch){
cout << ch;
}
return 0;
}
上述条件为sin(0)返回0,因此在递归的其余部分没有用,并且它工作正常。
float sine(float an, int n)
{
if (an == 0)
return 0;
让我们通过替换n的值来查看函数的这一部分的位置:
假设我们从degree = 30开始,迭代次数= 3
然后:
else if(n >= 0)
if(n%2 == 1)
return (sine(an,n-2) - pow(an,n)/factorial(n)) * pow(-1,n);
else
return (sine(an,2*n-1) - pow(an,2*n+1)/factorial(2*n+1)) *-1 ;
n很奇怪,所以函数返回:
n = 3;
n又是奇数,所以函数返回:
((sine(an, 3-2) - (float)pow(an, 3) / factorial(3)) * -1);
n = 1;
这一次((sine(an, 1-2) - (float)pow(an, 1) / factorial(1)) * -1);
n = -1;
因此if-else条件被跳过并且返回了一些垃圾值,因为您没有告诉您的程序在n < 0
返回什么
所以你需要你的正弦函数在n = 0
n = 0
将始终返回-1,对于n的偶数值,将始终返回1。因此,sine()函数的输出符号不会像系列中那样交替变化。
回答评论:为什么标志似乎改变为奇数或偶数,
在你的代码中,n的数值是跳过偶数,而不是每次调用减少1,你只传递奇数。
pow(-1,n)
所以你最终得到的是一些负面因素;当你以n为2的偶数值开始时,则第二次用奇数值n调用sine(),这是(2 * n-1),它再次返回负数之和。
继承你能做什么:
return (sine(an,n-2) - pow(an,n)/factorial(n)) * pow(-1,n);