使用递归的霍纳规则 C/C++

Horner's Rule C/C++ Using Recursion

本文关键字:规则 C++ 递归      更新时间:2023-10-16

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

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

你可以用指针算术来做到这一点:

  1. 数组末尾的基本大小写(检查 n)返回常量参数
  2. 递归
  3. 案例返回添加到变量乘法递归调用的当前单元格
  4. 递归调用将数组移动到下一个单元格并更新计数器 (n)

基本上,这允许您通过将数组移动到下一个位置并发送(并且始终使用第一个单元格)而不是每次都发送整个数组来计算索引变量

您可以使用函数

中的 3 个参数实现如下函数,前提是数组 pi 包含从索引 0 到 degree+1 的从最高度到 0 的系数。Ex for 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