我在这里第一次了解了霍纳规则: 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];
}
我认为只有第四个参数才有可能。
你可以用指针算术来做到这一点:
基本上,这使您可以通过将数组移动到下一个位置并发送它(并始终使用第一个单元格)来计算索引变量,而不是每次都发送整个数组
您可以在函数中使用 3 个参数按如下方式实现该函数,前提是数组 pi 包含从索引 0 到度+1 的从最高度到 0 的系数。例如 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];
}
与其传递索引,不如将其a
视为指针(因为它是)。除此之外,您还需要减少n
,并跟踪它是否已经减少到零,而不是跟踪是否index==n
.