2012-04-16 43 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]; 

}