Je suis récemment passé par l'algorithme Divide and Conquer.Diviser et conquérir-Retour d'un tableau
Je suis capable de résoudre les problèmes si la valeur de retour suppose être un nombre entier unique.
Ex: 1. Recherche binaire, ici j'ai juste besoin de retourner 1 si trouvé, sinon -1.
Ex: 2. Nombre maximum dans un tableau, juste besoin de retourner un seul nombre.
Mais quand il s'agit de retourner un tableau, comme lorsque nous avons besoin de tout le tableau en sortie (Ex: Tri).
Je le sens difficile.
Quelqu'un peut-il aider avec la meilleure approche?
Voici mon approche pour la recherche binaire.
#include<stdio.h>
char* Divide(int arr[],int l,int r,int key)
{
int m=(l+r)/2;
if(l==r)
{
if(key==arr[m])
return "Found";
else
return "Not Found";
}
else
{
if(key==arr[m])
return "Found";
else if(key>arr[m])
Divide(arr,m+1,r,key);
else
Divide(arr,l,m,key);
}
}
int main()
{
int arr[]={1,2,3,4,5,6,7,8};
int n=sizeof(arr)/sizeof(arr[0]);
char* result=Divide(arr,0,n-1,10);
printf("%s\n",result);
return 0;
}
Vos appels récursifs de 'Divide' ne retourne rien. Cela conduit à * comportement indéfini *. –
Aussi, s'il vous plaît prenez le temps de [lire sur la façon de poser de bonnes questions] (http://stackoverflow.com/help/how-to-ask). Votre question manque d'informations, comme dire ce qui ne va pas avec le code que vous montrez? Je vous recommande également de lire [Comment déboguer de petits programmes] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) par Eric Lippert, et d'apprendre à utiliser un débogueur. –
Lorsque la fonction se termine, elle revient implicitement, il est donc nécessaire d'appeler l'instruction return. – Zoholover