我正在爲我的計算I類編寫一個小程序,其中程序需要由用戶決定的一些整數並計算點積。我能夠使用迭代方法成功完成,但現在我們還必須使用遞歸來完成它。我計算點積的函數返回大量不正確的數字。有時它會返回數組中最後兩個值的乘積的兩倍,當有另外4個集合沒有被添加時。其他時候,我將有2個3個小數組的數組,並且返回的價值在8萬。下面是遞歸函數:返回不可理解的答案的遞歸函數
//A and B are the arrays that will be dotted together, and n is number of
//elements in each array
int dotP(int *A, int *B, int n) {
if(n==1) return A[0] * B[0] ;
return A[n-1] * B[n-1] + dotP(&A[n-1], &B[n-1], n-1);
}
你能張貼分配陣列A的代碼和B調用函數?這可能是因爲它們沒有正確分配或者初始化不正確。 – Owen
您能否提供樣本數據輸入? –
您是否想過嘗試打印正在處理的數字?''if'代碼中的'printf(「A [0] =%d,B [0] =%d \ n」,A [0],B [0]);'int dp = dotP(&A [n-1],&B [n-1],n-1); printf(「A [%d] =%d,B [%d] =%d,DotProduct =%d \ n」,n-1,A [n-1],n-1,B [n-1] ,dp);返回A [n-1] * B [n-1] + dp;'代碼的'else'部分。這會告訴你事情正在走向失控。您甚至可以將元素0的數組打印到「n-1」以獲得較好的效果。如果您沒有調試器(有時即使您有調試器),這也是最簡單的調試方法。 –