2012-04-16 112 views
2

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

我认为这是唯一可能的第四个参数。

+1

是的,应该可以用递归写入试一试。如果你有问题,你可以问另一个问题(或编辑这个问题)并从那里去。 – twain249 2012-04-16 02:51:10

+0

我不知道是否有一种方法来实现没有索引参数...... ?? – user1290709 2012-04-16 03:10:03

+0

其实这是我想出的完全一样的东西,它似乎工作。如果没有第四个参数,我没有想到它。 – twain249 2012-04-16 03:12:24

回答

2

可以与指针运算做到这一点:在阵列(检查N)返回恒定参数的端

  1. 基本案例
  2. 递归壳体回流加入到可变电流细胞乘以递归调用
  3. 递归调用移动阵列到下一个单元格并更新计数器(n)

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

+0

@JerryCoffin我把它改变成了一个如何。 – twain249 2012-04-16 04:54:25

+0

是 - 好多了(至少IMO)。 – 2012-04-16 04:57:00

+0

@JerryCoffin自从他第一次问这个问题以来,我一直在思考这个问题,当我想出来时,我有点兴奋。 – twain249 2012-04-16 04:57:59

0

不是传递索引,而是将a作为指针(因为它是)。除此之外,你会想要减少n,并跟踪它是否减少到零,而不是跟踪是否index==n

1

您可以在函数中使用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]; 

}