我第一次在这里了解了霍纳的规则: Horner's rule in C++ 由于我正在学习递归ATM,我想知道是否可以使用递归来实现这个算法?
int HornerR( int a[], int n, int x, int index )
{
if (index==n) return a[n];
else
return x*HornerR(a,n ,x,index+1) + a[index];
}
我认为只有第四个参数才有可能。
答案 0 :(得分:2)
您可以使用指针算法:
基本上,这可以通过将数组移动到下一个位置并发送(并始终使用第一个单元格)而不是每次发送整个数组来计算索引变量
答案 1 :(得分:1)
你可以在函数中用3个参数实现如下函数,只要数组pi包含从索引0到度+ 1的最高度为0的系数。 Ex为3x ^ 2 + 2x ^ 1 + 1 => pi [3] = {3,2,1}
int compute_by_horner(int *pi, int degree, int x)
{
int i, j;
if (degree == 0)
{
return pi[0];
}
return compute_by_horner(pi, degree-1, x) * x + pi[degree];
}
答案 2 :(得分:0)
不要传递索引,而应将a
视为指针(因为它是)。除此之外,您还需要递减n
,并跟踪它是否已降为零,而不是跟踪是否index==n
。