标题:采用嵌套调用函数
只看楼主
yhs39
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-6-3
结帖率:66.67%
已结贴  问题点数:10 回复次数:2 
采用嵌套调用函数
π/2=(2*2)/(1*3)*(3*3)/(2*4)*(4*4)/(3*5)*.....*[(n+1)]^2/(n*(n+2)),采用嵌套调用函数求π的值
#include<stdio.h>
float l(float n)
{

    float j(float n);
    float k(float n);
    float pi,x,y;
    pi=2*x/y;
    return(pi);
}
float j(float n)
{
    int i;
    float x=1;
    for(i=1;i<n;i++)
    {
        x=x*(i+1)*(i+1);
    }
    return(x);
}
float k(float n)
{
    float i,y=1;
    for(i=1;i<n;i++)
    {
        y=y*i*(i+2);   
    }
    return(y);
}
main()
{
    float l(float n);
    int n1;
    float PI;
    scanf("%d",&n1);
    PI=2*l(n1);
    printf("%f",PI);
    return 0;   
}
搜索更多相关主题的帖子: return include 
2017-06-11 09:50
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:5 
可以做出来。但精度还赶不上自己背的,不知有哪个地方没弄好。
#include<stdio.h>
#define N 17500
double GetPi(double n)
{
    if(n>=N)
        return n*n/((n-1)*(n+1));
    else
        return (n==2.0?2:1)*(n*n/((n-1)*(n+1)))*GetPi(n+2);
}
int main()
{
    printf("%lf\n",GetPi(2.0));
    return 0;
}
2017-06-11 12:51
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:5 
π/2=(2*2)/(1*3)*(3*3)/(2*4)*(4*4)/(3*5)*.....*[(n+1)]^2/(n*(n+2))
通项公式化简得 (n^2+2n+1)/(n^2+2n),恒大于1
而前三项 (2*2)/(1*3) * (3*3)/(2*4) * (4*4)/(3*5) = 1.6
所以你算出来的PI肯定大于3.2,明显瞎扯。所以应该是
π/2 = [(2*2)/(1*3)] * [(4*4)/(3*5)] * [(6*6)/(5*7)] * …… * [(n+1)^2/(n*(n+2))]

程序代码:
#include <stdio.h>

double foo( unsigned n )
{
    double r = 1;
    for( unsigned i=1; i<=n; i+=2 )
        r *= ((i+1.0)/i) * ((i+1.0)/(i+2));
    return 2*r;
}

int main( void )
{
    printf( "%f\n", foo(10000000) );
    return 0;
}


2017-06-12 09:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-477813-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.077316 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved