霍纳(Horner)规则是采用最少的乘法运算策略,求多项式 A(x) = a[n]x^n + a[n-1]x^(n-1) + ... + a[1]x^1 + a[0]x^0 在x处的值。
该规则为 A(x) = (...((a[n]x + a[n-1])x + ... + a[1])x + a[0])。利用霍纳规则,编写C语言程序对多项式进行求值。
解:
分别用迭代和递归两种方法来实现,解题代码分别如下:
<1> 迭代:
#include <stdio.h>
int
horner(
int
*array,
int
n,
int
x)
{
int
result = array[n];
while
(n)
{
result = result * x + array[--n];
}
return
result;
}
int
main(
void
)
{
int
result = 0,
i = 0,
x = 0,
amount = 0;
do
{
printf
(
"Input the amount of coefficients(include zero.):"
);
scanf
(
"%d"
, &amount);
}
while
(amount <= 0);
int
a[amount];
printf
(
"Input the cofficients:"
);
for
(i = 0; i < amount; ++i)
{
scanf
(
"%d"
, &a[i]);
}
printf
(
"Input the x:"
);
scanf
(
"%d"
, &x);
result = horner(a, amount - 1, x);
printf
(
"The result is :%d"
, result);
return
0;
}
<2> 递归:
#include <stdio.h>
int
horner(
int
*array,
int
n,
int
x)
{
if
( !n )
{
return
*array;
}
return
horner(array + 1, n - 1, x) * x + *array;
}
int
main(
void
)
{
int
result = 0,
i = 0,
x = 0,
amount = 0;
do
{
printf
(
"Input the amount of coefficients(include zero.):"
);
scanf
(
"%d"
, &amount);
}
while
(amount <= 0);
int
a[amount];
printf
(
"Input the cofficients(Like:x,y,z or x y z):"
);
for
(i = 0; i < amount; ++i)
{
scanf
(
"%d"
, &a[i]);
}
printf
(
"Input the x:"
);
scanf
(
"%d"
, &x);
result = horner(a, amount - 1, x);
printf
(
"The result is :%d"
, result);
return
0;
}