Я пишу небольшую программу для моего класса Computing I, в которой программа принимает целое число целых чисел, определяемое пользователем, и вычисляет точечный продукт. Я смог сделать это успешно, используя итеративный метод, но теперь мы также должны сделать это, используя рекурсию. Моя функция для вычисления точечного продукта возвращает широкий диапазон неправильных чисел. Иногда он просто возвращает значение двойного результата двух последних значений в массивах, когда было еще 4 других набора, которые не были добавлены. В других случаях у меня будет 2 массива из 3 маленьких чисел, а значение возвращается в 80 тысяч. Вот рекурсивная функция:Рекурсивная функция, возвращающая непонятные ответы
//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
Можете ли вы предоставить ввод данных образца? –
Думали ли вы попробовать напечатать номера, которые вы обрабатываете в функции?'printf (" A [0] =% d, B [0] =% d \ n ", A [0], B [0]);' в коде 'if' и' 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); return A [n-1] * B [n-1] + dp; 'для 'else' части кода. Это покажет вам, что все идет по-настоящему. Возможно, вы даже напечатали массивы от элемента 0 до «n-1» для хорошей оценки. Это самый простой способ отладки, если у вас нет отладчика (а иногда даже если у вас есть отладчик). –