我在这里第一次了解到霍纳规则: Horner's rule in C++ 因为我学习递归ATM,我想知道是否有可能使用递归实现这个算法?霍纳规则C/C++使用递归
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];
}
我认为这是唯一可能的第四个参数。
我在这里第一次了解到霍纳规则: Horner's rule in C++ 因为我学习递归ATM,我想知道是否有可能使用递归实现这个算法?霍纳规则C/C++使用递归
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];
}
我认为这是唯一可能的第四个参数。
可以与指针运算做到这一点:在阵列(检查N)返回恒定参数的端
基本上,这可以让您通过将数组移动到下一个位置来计算索引变量,发送(并始终使用第一个单元格)而不是每次发送整个数组
不是传递索引,而是将a
作为指针(因为它是)。除此之外,你会想要减少n
,并跟踪它是否减少到零,而不是跟踪是否index==n
。
您可以在函数中使用3个参数如下实现该函数,只要数组pi包含索引中从最高度到0的系数0到度+1。 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];
}
是的,应该可以用递归写入试一试。如果你有问题,你可以问另一个问题(或编辑这个问题)并从那里去。 – twain249 2012-04-16 02:51:10
我不知道是否有一种方法来实现没有索引参数...... ?? – user1290709 2012-04-16 03:10:03
其实这是我想出的完全一样的东西,它似乎工作。如果没有第四个参数,我没有想到它。 – twain249 2012-04-16 03:12:24