Comment pouvez-vous trouver la valeur minimale dans un tableau en utilisant la récursivité?

Je dois écrire un code C qui trouve la plus petite valeur dans un tableau en utilisant la récursivité. Je l’ai déjà fait en utilisant la boucle for, mais la récursivité est plus délicate. Est-ce que quelqu’un peut m’aider??

Voici un code simple pour trouver la valeur minimale en utilisant la récursivité,

int rec(int a[],int n) { int min; if(n==1) return a[0]; else { min=rec(a,n-1); if(min 
  • Le minimum d’un tableau d’élément unique est cet élément unique (cas de base ou condition de terminaison).

  • Le min d’un tableau est le minimum de [le premier élément, le minimum du rest (à l’exclusion du premier élément)]

 #include  int minimum(int *a_s, int *a_e, int candidate){ if(a_s == a_e) return candidate; return minimum(a_s+1, a_e, *a_s < candidate ? *a_s : candidate); } int main(void){ int array[] = { 1,3,-2,0,-1}; printf("%d ", minimum(array+1, &array[sizeof(array)/sizeof(*array)], *array)); return 0; } 

Après accepter la réponse.

Vous trouverez ci-dessous une solution récursive qui ne détruit pas la stack. Estimez la profondeur maximale de la stack en O (ln2 (n)). D’autres solutions semblent indiquer que la profondeur maximale de la stack est O (n).

 int ArrayMin(const int a[], size_t n) { if (n <= 1) { if (n < 0) return 0; // Handle degenerate ArrayMin( ,0) return a[0]; } size_t nhalf = n / 2; int left = ArrayMin(a, nhalf); int right = ArrayMin(&a[nhalf], n - nhalf); return left < right ? left : right; } 

Répondu après 9 heures, nous pouvons supposer que la date d'échéance des devoirs est dépassée.

  1. Considérons que le premier élément du tableau est minimum.
  2. Appelez la fonction en passant l’adresse de base du tableau et le nombre d’éléments.
  3. Vérifiez que tout autre nombre est inférieur à la valeur minimale, si oui, affectez cette valeur à la valeur minimale.
  4. Pour chaque itération, incrémentez l’adresse du tableau et décrémentez le nombre d’éléments!

Essayez ce code-

 #include int min; int arrfun(int *arr,int n) { if(n){ if(*arr < min) // check any no is less than minimum. min = *arr; // if yes assign it } else return min; // when n becomes 0 it returns the minimum element arrfun(++arr,--n); // recursive call } int main() { int arr[]={7,3,9,2,1,6}; min = arr[0]; // Taking first element is minimum printf("minimum is: %d\n",arrfun(arr,6)); // call the function by passing address and no of elements in array return 0; }