配列内の最大数を見つけるプログラムを作成しました。find_largest
問題は、関数が再帰的に呼び出されるたびに、largest
変数がメモリ内の別の場所からのガベージで満たされているように見えることです。デバッガーを使用してステップ実行しましたが、再帰呼び出しまで正常に動作しているようです。配列のポインターと への更新largest
(該当する場合) は、予期される値を示します。
/*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
}
}
プログラムは、最大の整数としてゼロを返します。何か案は?