Bey-Hey 2022-05-11 00:20 采纳率: 85.7%
浏览 22
已结题

递归算法中运行时显示错误:类型为“float”和“float(int,float)”的操作数对二进制运算符*无效

 /*1、编写一递归算法计算如下函数Pn(x)的值,并转换成对应的非递归算法:
               1                                                                 n=0
Pn(x)=   x                                                                  n=1
              ((2n-1)*x*Pn-1(x)-(n-1)*Pn-2(x))/n         n>1
*/

#include<stdio.h>

float Pn(int n,float x)
{
    float s;
    if(n==0)
        return(1);
    else
        if(n==x)
        return(x);
    else
        {
            s=((2*n-1)*x*Pn-1(x)-(n-1)*Pn-2(x))/n;
            return(s);
            }
}

//转换成非递归
float f1(int n,float x)
{
    int i;
    float s,s1,s2;
    if(n==0)
        return(1);
    else
        if(n==x)
        return(x);
    else
    {
        s1=1;
        s2=2;
        for(i=2;i<=n;i++)
        {
            s=((2*i-1)*x*s2-(i-1)*s1)/i;
            s1=s2;
            s2=s;
        }
        return(s);
    }
}

int main()
{
    int n;
    float x,y;
    printf("请输出n的值:");
    scanf("%d",&n);
    printf("请输出x的值:");
    scanf("%f",&x);
    y=Pn(n,x);
    printf("函数Pn(x)的值为:");
    scanf("%f\n",y)
     y=f1(n,x);
    printf("函数Pn(x)的值为:");
    scanf("%f\n",y);
}


结果显示错误

img

img

  • 写回答

1条回答 默认 最新

  • cdh929511015 2022-05-11 06:19
    关注
    
                s = ((2 * n - 1) * x * Pn - 1(x)-(n - 1) * Pn - 2(x)) / n;
    改
    
              s = ((2 * n - 1) * x * Pn(n - 1, x)-(n - 1) * Pn(n - 2, x)) / n;
    

    递归是调用函数自己的, 你这个Pn函数需要参数的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月19日
  • 已采纳回答 5月11日
  • 创建了问题 5月11日