用C语言递归计算pi值
所以我试着用递归计算pi的值。我的代码如下所示:用C语言递归计算pi值,c,recursion,C,Recursion,所以我试着用递归计算pi的值。我的代码如下所示: #include <stdio.h> #include <math.h> #include <stdlib.h> #include <malloc.h> double pi (int n){ double s = 0; s = s + 4 * ( pow(-1,n+1 ) * (1/(2*n-1) ) ); if( n > 0 ) { pi( n -
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <malloc.h>
double pi (int n){
double s = 0;
s = s + 4 * ( pow(-1,n+1 ) * (1/(2*n-1) ) );
if( n > 0 ) {
pi( n - 1 );
}
return s;
}
int main(void) {
int n,i;
float *A;
scanf("%d", &n);
A = (float*)malloc( n *sizeof(float) );
for( i = 0 ; i < n; i++ ) {
A[i] = pi( i + 1 );
}
for( i = 0; i < n; i++ ) {
printf( "%f\n", A[i] );
}
return 0;
}
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <malloc.h>
double pi (int n){
double s = 0;
if( n > 0 ) {
s = s + 4 * ( pow(-1,n+1 ) * (1/(2*(double)n-1) ) );
s += pi( n - 1 );
}
return s;
}
int main(void) {
int n,i;
float *A;
scanf("%d", &n);
A = (float*)malloc( n *sizeof(float) );
for( i = 0 ; i < n; i++ ) {
A[i] = pi( i + 1 );
}
for( i = 0; i < n; i++ ) {
printf( "%f\n", A[i] );
}
return 0;
}
#包括
#包括
#包括
#包括
双π(整数n){
双s=0;
s=s+4*(功率(-1,n+1)*(1/(2*n-1));
如果(n>0){
pi(n-1);
}
返回s;
}
内部主(空){
int n,i;
浮动*A;
scanf(“%d”和“&n”);
A=(浮动*)malloc(n*sizeof(浮动));
对于(i=0;i
对于
n=1
的值,它返回预期的答案pi=4
,但对于任何其他值,它计算出pi=0
。有人愿意解释原因吗?使用s=s+4*(pow(-1,n+1)*(1.0/(2*n-1))代码>
而不是s=s+4*(pow(-1,n+1)*(1/(2*n-1))代码>
因为如果n=2,(1/(2*n-1))部分将给出1/3,并且1和3都是整数,结果将转换为整数,即0,这就是你得到0的原因。你可以这样做:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <malloc.h>
double pi (int n){
double s = 0;
s = s + 4 * ( pow(-1,n+1 ) * (1/(2*n-1) ) );
if( n > 0 ) {
pi( n - 1 );
}
return s;
}
int main(void) {
int n,i;
float *A;
scanf("%d", &n);
A = (float*)malloc( n *sizeof(float) );
for( i = 0 ; i < n; i++ ) {
A[i] = pi( i + 1 );
}
for( i = 0; i < n; i++ ) {
printf( "%f\n", A[i] );
}
return 0;
}
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <malloc.h>
double pi (int n){
double s = 0;
if( n > 0 ) {
s = s + 4 * ( pow(-1,n+1 ) * (1/(2*(double)n-1) ) );
s += pi( n - 1 );
}
return s;
}
int main(void) {
int n,i;
float *A;
scanf("%d", &n);
A = (float*)malloc( n *sizeof(float) );
for( i = 0 ; i < n; i++ ) {
A[i] = pi( i + 1 );
}
for( i = 0; i < n; i++ ) {
printf( "%f\n", A[i] );
}
return 0;
}
您没有保存递归调用返回的值。改变pi(n-1)代码>到s+=pi(n-1)提示:使用人类可读的变量名。像s
、n
和A
这样的简短而神秘的名称只会妨碍代码的可维护性。您应该解释原因,而不仅仅是编写代码。