霍纳(Horner)规则是采用最少的乘法运算策略,求多项式的值。

霍纳(Horner)规则是采用最少的乘法运算策略,求多项式的值。

算法思想:
利用递归horner(list, n, i+1, x) * x + list[i])求解。

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#define MAX_SIZE 101

float horner(float [], int, int, float);

int main()
{
    float coefficient[MAX_SIZE];//系数放入数组
    int n;//多项式项数
    int i;
    double result = 0;
    float x;
    /*输入多项式的项数*/
    printf("Enter the number of polynomial terms to generate: ");  
    scanf("%d", &n);  
    if(n < 1 || n > MAX_SIZE)
    {
        fprintf(stderr, "Improper value of n\n");
        exit(EXIT_FAILURE);
    }


    srand((unsigned)time(NULL));//随机数生成器
    for(i = 0; i < n; i++)
    {
        /*随机生成n个系数并存在数组coefficient里*/
        coefficient[i] = rand() / (float)(RAND_MAX / 100);
        printf("%lf\t", coefficient[i]);
    }


    /*输入多项式的自变量值*/
    printf("\nEnter the value of x: ");   
    scanf("%f", &x);


    /*多项式结果*/   
    result = horner(coefficient, n, 0, x);
    printf("\nResult of this polynomial in %f is %f\n", x, result);
    return 0;
}

 /*递归求解*/
float horner(float list[], int n, int i, float x)
{
    if(i == n - 1)
        return list[n-1]; /*递归出口*/
    else
        return horner(list, n, i+1, x) * x + list[i]; /*递归过程*/
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值