C语言函数调用,递归调用问题

[复制链接]
查看11 | 回复4 | 2010-8-9 22:26:22 | 显示全部楼层 |阅读模式
float P(float n,float x)
{float f;
if(n==0) f=0;
else if(n==1) f=x;
else if(n>=1) f=((2*n-1)*x-P((n-1),x)-(n-1)*P((n-2),x))/n;
return(f);}
#include
void main()
{float n;float x;
scanf("%f,%f",&n,&x);
printf("p=%f\n",P(n,x));}
我按照大家给的方法加了float P(float n,float x)
{
float f;
printf("n=%f,x=%f",n,x);
if(n==0)f=0;
else if(n==1)f=x;
else if(n>=1)f=((2*n-1)*x-P((n-1),x)-(n-1)*P((n-2),x))/n;
return(f);
}发现x的输出是错的,但是具体在哪儿有问题呢

回复

使用道具 举报

千问 | 2010-8-9 22:26:22 | 显示全部楼层
问题出在scanf的使用上。你是不是这样输入的?2.0,1.0回车?这样就会错了你试试2.0,1.0,3.0回车就是在第二个参数后面输入一个多余的。这样就应该能得到你想要的结果了。
回复

使用道具 举报

千问 | 2010-8-9 22:26:22 | 显示全部楼层
float型的数据不能用等于(==)来做比较,判断相等的方法是fabs(n-1)。我觉得n应该是整数吧?
回复

使用道具 举报

千问 | 2010-8-9 22:26:22 | 显示全部楼层
这个递归应该是没有问题,问题规模是减小的,有终止条件,楼主要是和预想的结果不对就要检查下是不是递归条件弄错了?
回复

使用道具 举报

千问 | 2010-8-9 22:26:22 | 显示全部楼层
在你的p函数加上printf检查看看float P(float n,float x){float f;printf("n=%f,x=%f",n,x);if(n==0)f=0;else if(n==1)f=x;else if(n>=1)f=((2*n-1)*x-P((n-1),x)-(n-1)*P((n-2),x))/n;ret
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行