J'ai ce devoir à la maison:valeur maximale dans récursion
Soit Pi être l'élément de arr indice i. Nous disons un indice i est 'bien placé' s'il existe un indice j (j> = i) de telle sorte que la somme des éléments dans PiPi 1 ... Pj rendements de l'indice i . En d'autres termes, un index est "bien placé" si une séquence d'éléments commençant à cet index donne l'index lorsqu'il est additionné.
Nous définissons « longueur bien placée » d'un indice bien placé pour être j-i 1 - La longueur de la séquence que lorsque additionnées montre que est bien placé l'index. Il est possible qu'un index soit bien placé avec plus d'une seule séquence d'éléments. La «longueur bien placée» dans ce cas est la longueur maximale des différentes séquences définissant l'index comme «bien placé». La «longueur maximale bien placée» est le maximum entre la longueur de placement de tous les indices bien placés dans arr.
Si aucun index dans le tableau n'est bien placé, la longueur maximale bien placée est considérée comme nulle.
Voici le code que j'ai écrit (cela ne fonctionne pas):
int longestIndexHelper(int arr[], int i, int cur, int sum, int flag)
{
if((arr[i]==115)||(i<0))
return 0;
if((sum==0)&&(flag==0))
cur= i;
if((sum+arr[i]==cur)&&(arr[i]<=cur))
return longestIndexHelper(arr, i+1, i, sum+arr[i], 1)+1;
else return 0;
}
int longestIndex(int arr[], int length)
{
int l, h;
if(length<=0)
return 0;
l= longestIndexHelper(arr, length-1, 0, 0, 0);
h= longestIndexHelper(arr, length, 0, 0, 0);
if(h>=l)
return longestIndex(arr, length-1);
else
return longestIndex(arr, length-2);
}
J'ai essayé de comprendre pourquoi il ne retourne pas la valeur maximale, je suppose que le IF et ELSE doivent définir quelque chose d'autre à faire ... Je ne peux utiliser que ces deux fonctions. merci!
ce sont i, cabot, somme, et le drapeau utilisé? utiliser des noms de variables plus descriptifs. Vous pouvez d'abord essayer un problème plus simple, par exemple trouver la valeur maximale dans le tableau. – ysth
D'où vient le "115" dans "arr [i] == 115"? Aussi, à tout le moins, vous devriez vérifier i> 0 * avant * que vous l'utilisiez pour indexer 'array'. –
indice: la conception d'une fonction "auxiliaire" récursive qui a besoin de savoir si elle est appelée interne ou externe (votre "drapeau") signifie généralement que vous avez réparti les responsabilités incorrectes et que la fonction d'assistance devrait être plus ou moins. – ysth