我在這裏第一次瞭解到霍納規則: 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