Я написал программу для поиска наибольшего числа в массиве. Проблема в том, что каждый раз, когда функция find_largest
вызывается рекурсивно, переменная largest
, кажется, заполняется мусором из другого места в памяти. Я прошел через него с помощью отладчика и, похоже, работает нормально до рекурсивного вызова. Указатели для массива и обновление до largest
, если применимо, показывают ожидаемые значения.Почему моя переменная меняет значения в рекурсивном вызове в моей программе на C?
/*This program will find the largest integer in an array. It was written to practice
using recursion.*/
#include <stdio.h>
void find_largest(int *a, int n);
int main() {
int a[] = {10, 27, 101, -8, 16, 93};
int n = 6, i = 0;
printf("Current array: ");
while(i < n) {//print array
printf("%d ", a[i]);
i++;
}
find_largest(a, n);
return 0;
}//end main
//This function will start at the last element, and then step through the array
//in reverse order using pointers.
void find_largest(int *a, int n) { //formulate the size-n problem.
int largest = 0;
if(n == 0) { //find the stopping condition and the corresponding return
printf("\nThe largest number is: %d \n", largest);
}
else { //formulate the size-m problem.
n--; //decrement so that the proper number is added to pointer reference
if(largest <= *(a + n)) //check if element is larger
largest = *(a + n); //if larger, assign to largest
find_largest(a, n); //recursive call
}
}
Программа возвращает нуль как наибольшее целое число. Есть идеи?
Это определенно * ошибка * с кодом, но это не объясняет, почему нулевая инициализированная переменная заполняется «мусором», а не только 0. – Chuck
Это, вероятно, нет - артефакт отладчика или ОП неверно истолковывают, вероятно , Во всяком случае, вопрос OP был «Программа возвращает ноль как самое большое целое. Любые идеи?» –
+1 Мне нравится этот ответ лучше – tay10r