| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2673 人关注过本帖
标题:用递归方法求n阶勒让德多项式的值 用for循环实现前20阶勒让德多项式的数值输 ...
只看楼主 加入收藏
山脉
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-10-20
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
用递归方法求n阶勒让德多项式的值 用for循环实现前20阶勒让德多项式的数值输出
用递归方法求n阶勒让德多项式的值  用for循环实现前20阶勒让德多项式的数值输出
#include<stdio.h>
int pn(int n, int x)
{
    int y;
    if(n==0)
        y= 1;
    if(n==1)
        y= x;
    if(n>1) y= ((2*n-1)*x-pn(n-1,x)-(n-1)*pn(n-2,x))/n;
    return y;
}
void main()
{
      int i,a,b,z;
       scanf("%1d","%1d",a,b);                        
        for(i=0;i<20;i++);                       
         printf("z=%f\n",z=pn(a,b));                     
}
哪里不对
2015-11-23 16:55
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:7 
if(n>1) y= ((2*n-1)*x-pn(n-1,x)-(n-1)*pn(n-2,x))/n;
    return y;


注意上面的这行代码,  这里的y应该大多数情况下不会是int类型的数字,  所以最后的结果大多数情况都不能是正确的.

代码测试环境:  WinXP+C-Free5.0.
2015-11-23 17:11
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:7 
好几处错误。
1:勒让德多项式的值肯定是实数,应是float或double类型
2:你输入了固定的a,b值作为递归函数的n,x,那你循环的i值起什么作用?
3:for语句后直接分号,那你这个循环空循环了。

能编个毛线衣吗?
2015-11-23 19:20
山脉
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-10-20
收藏
得分:0 
回复 3楼 wmf2014
请问 第二条 怎么修改
2015-11-25 10:45
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:7 
好像公式就不对
y=((2*n-1)*x-pn(n-1,x)-(n-1)*pn(n-2,x))/n;
y=((2*n-1)*x*pn(n-1,x)-(n-1)*pn(n-2,x))/n;
2015-11-25 12:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
程序代码:
#include <stdio.h>

double pn( unsigned n, double x )
{
    if( n == 0 )
        return 1;
    if( n == 1 )
        return x;
    return ((2*n-1)*x*pn(n-1,x)-(n-1)*pn(n-2,x))/n;
}

int main( void )
{
    double x;
    if( scanf("%lf",&x) != 1 )
        return 1;

    for( unsigned i=1; i!=21; ++i )
        printf( "P%u(%lg) = %lf\n", i, x, pn(i,x) );

    return 0;
}
输入 1
P1(1) = 1.000000
P2(1) = 1.000000
P3(1) = 1.000000
P4(1) = 1.000000
P5(1) = 1.000000
P6(1) = 1.000000
P7(1) = 1.000000
P8(1) = 1.000000
P9(1) = 1.000000
P10(1) = 1.000000
P11(1) = 1.000000
P12(1) = 1.000000
P13(1) = 1.000000
P14(1) = 1.000000
P15(1) = 1.000000
P16(1) = 1.000000
P17(1) = 1.000000
P18(1) = 1.000000
P19(1) = 1.000000
P20(1) = 1.000000
输入 1.23
P1(1.23) = 1.230000
P2(1.23) = 1.769350
P3(1.23) = 2.807167
P4(1.23) = 4.715416
P5(1.23) = 8.194196
P6(1.23) = 14.548399
P7(1.23) = 26.209104
P8(1.23) = 47.714896
P9(1.23) = 87.560627
P10(1.23) = 161.685779
P11(1.23) = 300.067037
P12(1.23) = 559.196076
P13(1.23) = 1045.728838
P14(1.23) = 1961.364694
P15(1.23) = 3688.111660
P16(1.23) = 6950.451699
P17(1.23) = 13124.061641
P18(1.23) = 24824.065265
P19(1.23) = 47026.847403
P20(1.23) = 89211.031495

听说谭教主的经书中把公式抄错了
2015-11-25 12:42
快速回复:用递归方法求n阶勒让德多项式的值 用for循环实现前20阶勒让德多项式的 ...
数据加载中...
 
   



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

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