Horner的规则C / C ++使用递归

时间:2012-04-16 02:49:02

标签: c++ recursion

我第一次在这里了解了霍纳的规则: 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];
} 

我认为只有第四个参数才有可能。

3 个答案:

答案 0 :(得分:2)

您可以使用指针算法:

  1. 数组末尾的基本案例(check n)返回常量参数
  2. 递归案例返回当前单元格添加到变量乘法递归调用
  3. 递归调用将数组移动到下一个单元格并更新计数器(n)
  4. 基本上,这可以通过将数组移动到下一个位置并发送(并始终使用第一个单元格)而不是每次发送整个数组来计算索引变量

答案 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