霍纳(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]; /*递归过程*/
}